我有两个TabControl
s的TabItem
。我在第一个标签中运行了Thread
。当第一个选项卡失去焦点时,我必须暂停该线程。但是我对LostFocus
的TabItem
事件有一个小问题。 LostFocus
事件不是在TabItem
第一次失去焦点时触发,而是第二次。为什么这样,我怎么第一次点火?
以下是我的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>
为第一个TabItem Control Name =“tabMain”添加Loaded事件。
在那个事件中添加下面提到的行。
tabMain.Focus();
由于TabControl在第一次加载时没有将焦点放在第一个Tab项上,因为第一个标签没有得到聚焦,因为LostFocus事件没有被触发,因为为了触发LostFocus事件,GotFocus事件应该被触发一次。
因此允许显式焦点到第一个选项卡项。