【问题标题】:WPF TabBarControl Setting Focus to element when tab changesWPF TabBarControl 在选项卡更改时将焦点设置为元素
【发布时间】:2010-03-24 23:10:13
【问题描述】:

我有一个绑定到视图模型的 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>

当当前选项卡更改时,我希望焦点位于数据模板中的文本框(这是一个简单的示例,在我的生产代码中我有一个数据网格)。我该如何做到这一点?

【问题讨论】:

  • 在代码或 XAML 中设置焦点?
  • 在 xaml 中这样做会很好,选项卡项的数量是动态的。在代码中设置它,意味着拖网查找文本框的可视化树。如何在数据模板上设置初始焦点元素以及如何在选项卡栏上设置焦点的一般解决方案会很好。但我不介意使用代码。甚至从标签栏派生,所以我不必把它放在后面的代码中。

标签: wpf focus datatemplate tabbar


【解决方案1】:

当您在 DataTemplate 中定义模板时,我不完全确定您是否可以将焦点设置在 UIElement 上。您可以将 DataTemplate 的内容放在 UserControl 中,然后在程序上将焦点设置在 TextBox 上,而不是直接使用 DataTemplate。

<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获得了焦点。

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多