2

2 つの項目を持つ 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

しかし、2番目の項目をクリックして再試行すると、出力がありません! SelectionChanged イベントは発生しません。

どうしたの?回避策はありますか?

4

2 に答える 2

6

これは、同期的に自身を呼び出す SelcetedIndexChanged イベント内で 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);
   }
}

必要な出力が得られます。

于 2011-10-16T18:49:55.530 に答える
-1

すでに選択されているタブをクリックすると、選択の変更はありませんか?
そのため、SelectionChanged イベントは発生しません。

TabItem のヘッダーの Click イベントでイベント ハンドラーをフックする必要があります。

于 2011-10-16T18:24:21.840 に答える