TabItem LostFocus事件第一次没有触发

问题描述 投票:0回答:3

我有两个TabControls的TabItem。我在第一个标签中运行了Thread。当第一个选项卡失去焦点时,我必须暂停该线程。但是我对LostFocusTabItem事件有一个小问题。 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

c# wpf tabitem lostfocus
3个回答
1
投票

似乎这是一个奇怪的WPF行为。您可以通过强制聚焦您的第一个TabItem来解决它:

码:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    tabMain.Focus();
}

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>

0
投票

为第一个TabItem Control Name =“tabMain”添加Loaded事件。

在那个事件中添加下面提到的行。

tabMain.Focus();

由于TabControl在第一次加载时没有将焦点放在第一个Tab项上,因为第一个标签没有得到聚焦,因为LostFocus事件没有被触发,因为为了触发LostFocus事件,GotFocus事件应该被触发一次。

因此允许显式焦点到第一个选项卡项。

© www.soinside.com 2019 - 2024. All rights reserved.