WPF SelectedIndex设置了TabControl的问题

时间:2011-10-16 18:18:13

标签: wpf tabcontrol 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

但重试点击第2项,无输出! SelectionChanged事件不会触发。

怎么了? 有工作吗?

2 个答案:

答案 0 :(得分:5)

这是因为您正在更改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);
   }
}

它会为您提供所需的输出。

答案 1 :(得分:-1)

如果单击已选中的选项卡,则现在没有选择更改吗?
所以SelectionChanged事件不会触发。

您必须在TabItem的标题的Click事件上挂钩事件处理程序