Событие TabItem LostFocus не запускается в первый раз

У меня есть TabControl с двумя TabItems. у меня есть Thread работает в первой вкладке. Когда первая вкладка теряет фокус, я должен приостановить поток. Но у меня есть небольшая проблема с LostFocus событие TabItem, 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

2 ответа

Решение

Похоже, это странное поведение WPF. Вы можете обойти это, сосредоточив усилия на первом TabItem:

Код:

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

TabItem не имеет фокуса, когда вы открываете его в первый раз.

Итак, установите фокус на дочерний элемент TabItem, который в вашем случае ucMain, Установите свойство FocusManager.FocusedElement для tabItem в самом XAML.

<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 Name="tabMain".

В этом случае добавьте ниже упомянутую строку.

tabMain.Focus ();

Так как TabControl не дает фокус на первый элемент Tab при первой загрузке, так как первая вкладка не фокусируется из-за того, что событие LostFocus не запускается, потому что для запуска события LostFocus событие GotFocus за один раз должно быть запущено.

Следовательно, позволяя явный фокус на элементе первой вкладки.

Другие вопросы по тегам