我有一个包含两个项目的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事件不会触发。
怎么了? 有工作吗?
答案 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事件上挂钩事件处理程序