TabItem LostFocus事件第一次没有触发

时间:2014-06-16 07:50:30

标签: c# wpf tabitem lostfocus

我有两个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>

3 个答案:

答案 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 事件

因此可以明确显示焦点到“第一个标签项”。