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>