0

ビューモデルにバインドされた TabControl があります

          <TabControl
             ItemsSource="{Binding Path=ViewModelCollection}" >
             <TabControl.ItemContainerStyle>
                <Style
                   TargetType="TabItem"
                   BasedOn="{StaticResource {x:Type TabItem}}">
                   <Setter
                      Property="Header"
                      Value="{Binding Title}" />
                   <Setter
                      Property="Content"
                      Value="{Binding}" />
                </Style>
             </TabControl.ItemContainerStyle>
          </TabControl>

各タブには、ビュー モデル アイテムが含まれているだけです。これを表示するには、データ テンプレートを使用します。

  <!-- View Model Template -->
  <DataTemplate
     DataType="{x:Type local:ViewModelItem}">
     <DockPanel>
        <TextBox Text="I want this to have the focus"/>
     </DockPanel>
  </DataTemplate>

現在のタブが変更されたときに、データ テンプレートのテキスト ボックス (これは単純な例であり、本番コードではデータグリッドがあります) にフォーカスを合わせたいと考えています。どうすればこれを達成できますか?

4

1 に答える 1

0

DataTemplateでテンプレートを定義しているときに、UIElementにフォーカスを設定できるかどうかは完全にはわかりません。DataTemplateを直接操作する代わりに、DataTemplateのコンテンツをUserControlに配置してから、TextBoxに手続き的にフォーカスを設定することができます。

<Window.Resources>
  <DataTemplate DataType="{x:Type local:ViewModelItem}">
    <ContentControl Content="{Binding Path=YourProperty}" />
  </DataTemplate>
</Window.Resources>


<TabControl ItemsSource="{Binding Path=ViewModelCollection}">
  <TabControl.ItemContainerStyle>
    <Style
       TargetType="TabItem">
        <Setter
          Property="Header"
          Value="{Binding Path=Title}" />
    </Style>
  </TabControl.ItemContainerStyle>
</TabControl>

そして、UserControlの背後にあるコード:

public MyUserControl()
{
  InitializeComponent();
  this.Loaded += new RoutedEventHandler( OnLoaded );
}

void OnLoaded( object sender, RoutedEventArgs e )
{
  MyTextBox.Focus();
}

私は小さなプロジェクトを作成し、DataTemplateをUserControlにプッシュすることで、タブが変更されたときにTextBoxにフォーカスが移りました。

于 2010-03-25T01:43:37.567 に答える