C# TabItem LostFocus事件不是第一次触发
我有一个C# TabItem LostFocus事件不是第一次触发,c#,wpf,tabitem,lostfocus,C#,Wpf,Tabitem,Lostfocus,我有一个TabControl和两个TabItems。我在第一个选项卡中运行了一个线程。当第一个选项卡失去焦点时,我必须挂起线程。但是我对TabItem的LostFocus事件有一个小问题。LostFocus事件不会在TabItem第一次失去焦点时触发,而是在第二次失去焦点时触发。为什么会这样?我如何让它第一次着火 以下是我的xaml代码: <Grid> <TabControl Name="tbc"> <TabItem Name="tabMai
TabControl
和两个TabItem
s。我在第一个选项卡中运行了一个线程
。当第一个选项卡失去焦点时,我必须挂起线程。但是我对TabItem
的LostFocus
事件有一个小问题。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时,它没有焦点
因此,将焦点设置在TabItem的子元素上,在您的例子中,它是ucMain。在XAML本身的tabItem上设置属性
<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控件名=“tabMain”添加加载的事件
在这种情况下,添加下面提到的行
tabMain.Focus()强>
由于TabControl在第一次加载时不会对第一个选项卡项进行聚焦,因为第一个选项卡不会聚焦,因为LostFocus事件不会被触发,因为要触发一次LostFocus事件GotFocus事件,它应该被触发
因此,允许对第一个选项卡项进行显式聚焦 在此发布示例XAML代码以复制您的问题。我已经尝试将其添加到窗口的构造函数:FocusManager.SetFocusedElement(tabMain.Parent,tabMain)代码>。我也试过你的建议。它不起作用了。我在Window_加载事件中找到了它。但同样的情况并没有发生在构造函数中。
<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>