簡體   English   中英

TabItem LostFocus事件不是第一次觸發

[英]TabItem LostFocus Event is not firing the first time

我有一個帶有兩個TabItemTabControl 我在第一個選項卡中運行了一個Thread 當第一個選項卡失去焦點時,我必須暫停線程。 但是我對TabItemLostFocus事件有一個小問題。 TabItem第一次失去焦點時不會觸發LostFocus事件,而是第二次觸發。 為什么會這樣,我如何使其首次啟動?

以下是我的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

似乎這是一種奇怪的WPF行為。 您可以通過強制集中第一個TabItem

碼:

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

第一次打開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>

為第一個TabItem控件名稱=“ tabMain”添加Loaded事件。

在這種情況下,請添加以下提到的行。

tabMain.Focus();

由於TabControl在首次加載時不會將焦點放在第一個Tab項上,因此由於未觸發LostFocus事件,因此不會觸發第一個選項卡,因為要觸發一次LostFocus事件,必須先觸發GotFocus事件。

因此,允許顯式焦點到第一個選項卡項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM