2014-06-16 8 views
0

TabControlTabItem 두 개가 있습니다. 첫 번째 탭에 Thread이 실행 중입니다. 첫 번째 탭에서 포커스가 사라지면 스레드를 일시 중단해야합니다. 하지만 TabItemLostFocus 이벤트와 관련된 작은 문제가 있습니다. TabItem이 처음으로 포커스를 잃을 때 LostFocus 이벤트가 트리거되지는 않지만 두 번째입니다. 왜 그런데 처음으로 어떻게 불을 냅니까? 위의 코드에서TabItem LostFocus 이벤트가 처음 실행되지 않습니다.

<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 : 다음

내 XAML 코드 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의 초점이 없습니다.

그래서, 귀하의 경우에는 ucMain 인 TabItem의 하위 요소에 포커스를 설정하십시오. 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>