TabItem OnSelectionChanged()设置内部控件聚焦(WPF)

4

我有两个TabItem包含在一个TabControl中。

每个TabItem都包含几个TextBox

TabControlOnSelectionChanged事件被触发时,除了选择新的TabItem之外,它还会将焦点设置在新选择的项目中第一个TextBox上。

有没有办法防止这种情况发生?

TextBox上设置IsTabStop="False"可以实现此目的,但不幸的是也会阻止TextBox被“tabbed”到。


1
我建议在选项卡选择更改时将焦点设置为标签或其他非输入控件。 - Andrew Grinder
1
@AndrewGrinder 谢谢你的想法。虽然那个方法不起作用,但 <TextBox Width="0" MinWidth="0" MaxWidth="0"></TextBox> 可以 - 尽管感觉有点 hacky! - maxp
2个回答

2

在您的选项卡控件中,对每个选项卡处理焦点事件,像这样:

<TabItem GotFocus="TabItem_OnGotFocus">

然后只需使用以下方法移除焦点:
private void TabItem_OnGotFocus(object sender, RoutedEventArgs e)
{
    Keyboard.ClearFocus();
}

现在有任何替代方案吗?这解决了问题,但破坏了MVVM结构。 - Shannon

2

只需将容器添加到您的内容中,例如Grid、Stackpanel、Border等,并将其设置为Focusable。当Tab选择更改时,焦点将设置为容器,您也可以使用Tab键。

<TabItem Header="myHeader">
    <StackPanel Focusable="True">
       ...    
    </StackPanel>
</TabItem>

@shannon,这是关于MVVM的问题的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接