Событие TabItem LostFocus не запускается в первый раз
У меня есть TabControl
с двумя TabItem
s. у меня есть 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 за один раз должно быть запущено.
Следовательно, позволяя явный фокус на элементе первой вкладки.