TabItem LostFocus事件不是第一次激发的
本文关键字:第一次 LostFocus 事件 TabItem | 更新日期: 2023-09-27 18:08:41
我有一个TabControl
和两个TabItem
。我在第一个选项卡中运行Thread
。当第一个选项卡失去焦点时,我必须挂起线程。但我对TabItem
的LostFocus
事件有一个小问题。TabItem
第一次失焦时不会触发LostFocus
事件,而是第二次。为什么会这样?我如何让它第一次着火?
以下是我的xaml代码:
<Grid>
<TabControl Name="tbc">
<TabItem Name="tabMain" Header="Main" GotFocus="tabMain_GotFocus" LostFocus="tabMain_LostFocus" >
<uc:ucMain />
</TabItem>
<TabItem Name="tabExplorer" Header="Data Explorer">
<uc:ucExplorer />
</TabItem>
</TabControl>
</Grid>
在上面的代码中,uc:ucMain是一个UserControl
这似乎是一个奇怪的WPF行为。你可以通过强制聚焦你的第一个TabItem
:来解决它
代码:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
tabMain.Focus();
}
TabItem在第一次打开时没有焦点。
因此,将焦点设置在TabItem的子元素上,在您的情况下,它是ucMain
。在XAML本身的tabItem上设置FocusManager.FocusedElement属性。
<Grid>
<TabControl Name="tbc">
<TabItem Name="tabMain" Header="Main"
GotFocus="tabMain_GotFocus"
LostFocus="tabMain_LostFocus"
FocusManager.FocusedElement="{Binding ElementName=ucMain}" >
<uc:ucMain x:Name="ucMain"/>
</TabItem>
<TabItem Name="tabExplorer" Header="Data Explorer">
<uc:ucExplorer />
</TabItem>
</TabControl>
</Grid>
为第一个TabItemControl Name="tabMain"添加Loaded事件。
在这种情况下,添加下面提到的行。
tabMain.Focus((
由于TabControl在第一次加载时不会将焦点放在第一个选项卡项上,由于LostFocus事件没有被触发,所以第一个选项卡没有被聚焦,因为为了触发LostFocs事件GotFocus事件一次,它应该被触发。
因此允许将焦点明确到第一个选项卡项。