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

但重试点击第二项,没有输出!SelectionChanged 事件不会触发。

怎么了?有工作吗?

4

2 回答 2

6

这是因为您正在更改 SelectedIndexChanged 事件中的 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 的 Header 的 Click 事件上挂钩事件处理程序

于 2011-10-16T18:24:21.840 回答