2011-10-16 2 views
2

두 항목이있는 TabControl이 있습니다.WPF SelectedIndex TabControl 설정 문제

<TabControl x:Name="tab" SelectionChanged="TabControl_SelectionChanged"> 
    <TabItem Header="TabItem1"> 
    <Grid /> 
</TabItem> 
<TabItem Header="TabItem2"> 
    <Grid /> 
</TabItem> 
</TabControl> 

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Debug.WriteLine("Selected Index: " + tab.SelectedIndex); 

    if (tab.SelectedIndex == 1) 
    { 
     tab.SelectedIndex = 0; 
    } 
} 

클릭하면 2 번 항목, 1 번 항목은 포커스가 있고 아래에 인쇄하십시오.

Selected Index: 1 
Selected Index: 0 

두 번째 항목을 클릭하면 다시 시도하지 않습니다! SelectionChanged 이벤트가 발생하지 않습니다.

무엇이 잘못 되었나요? 해결 방법이 있습니까?

답변

4

의 헤더의 Click 이벤트에 대한 이벤트 처리기를 후크해야합니다. 대신 UI 디스패처에 다음과 같은 방식으로 넣으려고하십시오. -

private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Debug.WriteLine("Selected Index: " + tab.SelectedIndex); 

    if (tab.SelectedIndex == 1) 
    { 
     Application.Current.Dispatcher.BeginInvoke 
      ((Action)delegate { tab.SelectedIndex = 0; }, DispatcherPriority.Render, null); 
    } 
} 

원하는 출력을 제공합니다.

+0

도움 주셔서 감사합니다. 잘 작동한다. 하지만 아래 대화 상자가 있으면 작동하지 않습니다. if (tab.SelectedIndex == 1) { MessageBox.Show ("Hello"); ... } 무엇이 잘못 되었나요? – tree1891

+0

MessageBox를 UI 발송자에 배치 했습니까 ?? –

+0

예, 있습니다. 잘 작동한다. 이지만 탭 항목이 변경되었습니다. – tree1891

-1

이미 선택된 탭을 클릭하면 선택 변경이 없습니다.
따라서 SelectionChanged 이벤트는 발생하지 않습니다.

당신은 당신이 sycnhronous 방식으로 자신을 호출 할 SelcetedIndexChanged 이벤트 내에서 selectedIndex의 변화 때문이있는 TabItem의