我有两个TabControl
TabItem
。我在第一个标签中运行Thread
。当第一个选项卡失去焦点时,我必须暂停该线程。但是我对LostFocus
的{{1}}事件有一个小问题。第一次TabItem
失去焦点时,LostFocus
事件不会被触发。为什么这样,我怎么第一次点火?
以下是我的xaml代码:
TabItem
在上面的代码中,uc:ucMain是<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>
答案 0 :(得分:1)
似乎这是一个奇怪的WPF行为。您可以通过强制关注第一个TabItem
:
代码:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
tabMain.Focus();
}
答案 1 :(得分:0)
第一次打开时,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>
答案 2 :(得分:0)
为第一个 TabItem 控件名称=“ tabMain”添加 Loaded 事件。
在这种情况下,在下面提到的行中添加
。tabMain.Focus();
由于 TabControl 在首次加载时不会将焦点放在第一个Tab项上,因此由于未触发 LostFocus 事件而未触发第一个选项卡,因为为了一次触发 LostFocus 事件 GotFocus 事件
。因此可以明确显示焦点到“第一个标签项”。