我有一个绑定到视图模型的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>
当更改当前选项卡时,我希望焦点位于数据模板中的文本框上(这是一个简单的示例,在我的生产代码中,我有一个数据网格)。我该如何做到这一点?
答案 0 :(得分:0)
当您在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在更改选项卡时获得了关注。