0

私はMVVMの原則でWPFを使用しています。ビューは次のようになります。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MyResources.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <DataTemplate x:Key="ValveOptionTemplate" >                
            <Grid Margin="{StaticResource MyApp.DefaultMarginTopBottomThin}" 
                  VerticalAlignment="Center">                        
               <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="Auto"/>
                  <ColumnDefinition Width="Auto"/>
               </Grid.ColumnDefinitions>                        
               <Grid.RowDefinitions>
                  <RowDefinition Height="*"/>
               </Grid.RowDefinitions>

               <myApp:CheckBox Grid.Column="0"  Grid.Row="0" 
                               Margin="{StaticResource 
                                          MyApp.DefaultMarginTopBottomThin}"
                               IsChecked="{Binding IsSelected}" 
                               VerticalAlignment="Center" 
                               Checked="ToggleButton_OnChecked"/>
               <myApp:TextBox Grid.Column="1"  Grid.Row="0"
                              Width="300"
                              Margin="{StaticResource MyApp.DefaultMarginLeftThin}" 
                              VerticalAlignment="Center"
                              Text="{Binding Description, 
                                       UpdateSourceTrigger=PropertyChanged}" 
                              IsEnabled="{Binding IsEditable}"                                     
                              x:Name="textBox"/>    
            </Grid>                    
         </DataTemplate>    
        </ResourceDictionary>
    </UserControl.Resources>

    <Grid x:Name="OptionGrid">
        <ItemsControl x:Name="Options" ItemsSource="{Binding Options}"
                      ItemTemplate="{StaticResource ValveOptionTemplate}" 
                      FocusVisualStyle="{x:Null}" 
                      Margin="{StaticResource MyApp.DefaultMarginTopBottomThin}"/>
    </Grid>

私が言う奇妙なことは何もありません。myApp:TextBox にアクセスしてフォーカスを設定しようとしています。このために、コードビハインドでこの(未完成の)スニペットを使用します(MVVMの原則が何であるかを知っており、違反しているとは思いません)。

private void ToggleButton_OnChecked( object sender, RoutedEventArgs e )
{
   var cp = Options.ItemContainerGenerator.ContainerFromIndex(0) as ContentPresenter;        
   var dt = cp.ContentTemplate; //<--this is null! Why?
   var tb = (TextBox)(dt.FindName( "textBox", cp ));           
}

イベント ハンドラーに私のコメントが表示されますか? コンテンツ テンプレートが null ですか? なんで?何が間違っているのですか?

4

1 に答える 1