2014-06-16 52 views
0

我有一个TabControl两个TabItem s。我有一个Thread在第一个标签中运行。当第一个选项卡失去焦点时,我必须暂停该线程。但是我在TabItemLostFocus事件中遇到了一个小问题。 LostFocus事件不会在第一次触发TabItem时失去焦点,而是第二次。为什么是这样的,我怎么让它第一次开火?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

+1

在这里发布示例XAML代码来复制您的问题。 –

回答

1

看起来这是一个奇怪的WPF行为。你可以解决它的力量集中你的第一个TabItem

代码:当你打开它第一次

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

我已经尝试将此添加到窗口的构造函数中:'FocusManager.SetFocusedElement(tabMain.Parent,tabMain);'。我也尝试了你的建议。它不工作。 – Abhishek

+0

我在Window_Loaded事件中找到了它。但是在构造函数中不会发生这种情况。 – Abhishek

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> 
相关问题