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;
}
}
当单击第二项时,第一项具有焦点并在下面打印。
Selected Index: 1
Selected Index: 0
但重试单击第二项,没有输出! SelectionChanged 事件不会触发。
怎么了? 有解决办法吗?
I have a TabControl with two items.
<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;
}
}
when click 2nd item, 1st item have focus and print below.
Selected Index: 1
Selected Index: 0
but retry clicking 2nd item, no output!
SelectionChanged event do not fire.
what's wrong?
Is there work around?
这是因为您正在 SelcetedIndexChanged 事件中更改 selectedIndex,该事件将以同步方式调用自身。相反,尝试以异步方式将其放在 UI 调度程序上,如下所示 -
它将为您提供所需的输出。
This is because you are changing the selectedIndex within the SelcetedIndexChanged event which will call itself in sycnhronous manner. Instead try to put it on UI dispatcher in an aysnchronous manner like this -
It will give you the desired output.