2011-10-16 52 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; 
    } 
} 

當點擊第二項時,第一項有焦點並打印在下面。

Selected Index: 1 
Selected Index: 0 

但重試點擊第二項,沒有輸出! SelectionChanged事件不會觸發。

有什麼不對? 有工作嗎?

回答

4

頁眉的Click事件。這是因爲你正在改變SelcetedIndexChanged事件,這將調用其本身來sycnhronous方式中的selectedIndex事件處理程序。而是嘗試以異步方式將其放在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事件不會觸發。

你將不得不勾上的TabItem的