2010-12-28 28 views
4

ItemsControlがItemsSourceによってバインドされている間、DataTemplate内のグリッドにアクセスしようとしています。wpfのItemsPanelTemplate内のコントロールを見つける方法は?

これは完全なXMALコードです。外部から特定の要素を見つけるにはどうすればよいですか?

for (int i = 0; i < allViewControl.Items.Count; i++) 
{ 
var container = allViewControl.ItemContainerGenerator.ContainerFromItem(allViewControl.Items[i]) as FrameworkElement; 
var grid = allViewControl.ItemTemplate.FindName("grid", container) as DataGrid; 
} 

これは常にnullを返します。 MVVMはあなたが達成しようとしているものは何でもにシンプルなソリューションを与える必要があります使用して -

<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"> 
    <ItemsControl x:Name="allViewControl" Focusable="False" HorizontalContentAlignment="Center" 
    Grid.IsSharedSizeScope="true" ItemsSource="{Binding AllClassCharacters}" 
    ItemTemplate="{StaticResource CharacterViewModelTemplate}" > 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Extensions:AnimatedWrapPanel IsItemsHost="true" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</ScrollViewer> 



<DataTemplate x:Key="CharacterViewModelTemplate" DataType="{x:Type ViewModel:CharacterViewModel}"> 
      <Grid x:Name="grid" Width="200" Height="Auto" MinHeight="115" Margin="1" MinWidth="130" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RenderTransformOrigin="0.5,0.5" Background="#66000000"  > 
       <Grid.RowDefinitions> 
        <RowDefinition Height="70"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 
      <ProgressBar x:Name="playerProgressBar" VerticalAlignment="Top" Background="Transparent" Height="5" Width="Auto" Value="0" Visibility="Collapsed" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan ="2" Grid.RowSpan="2" Foreground="White" BorderThickness="0" Style="{DynamicResource ProgressBarStyle1}" /> 
</Grid> 

答えて

2

短い答えは、あなたがこれを実行する必要はありませんということです。

あなたがフォーカスを設定するようないくつかのニッチなケースのためにそれが必要な場合は、その上で「コントロールWPFを見つける」の検索 - コントロールをハックして取得するためのいくつかの既存の質問(example)はWPF UIツリーの外にある

+0

感謝あなたのリンクからコードを得ました – kakopappa

関連する問題