0

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

4

3 回答 3

1

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

代码:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    tabMain.Focus();
}
于 2014-06-16T08:02:19.240 回答
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>
于 2014-06-16T08:09:32.330 回答
0

为第一个TabItem控件 Name="tabMain"添加Loaded事件。

在那种情况下,添加下面提到的行。

tabMain.Focus();

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

因此允许显式关注第一个选项卡项。

于 2019-02-21T11:39:10.460 回答