有没有办法取消TabControl.Items.CurrentChanging?

Shi*_*mmy 5 wpf tabcontrol tabitem selectionchanging

遗憾的是没有TabControl.SelectionChanging事件(Selector.SelectionChanging),我正在努力实现这种行为,所以我可以取消更改请求.

我试图处理TabControl.Items.CurrentChanging(Items属性是和ItemCollection)事件设置e.Cancel(的CurrentChangingEventArgs)为true,但UI是使用新选项卡更新的,尽管该项目未在集合中更改.

TabItem当条件不满意时,有没有办法阻止用户切换到不同的?

Tho*_*son 5

我不知道为什么会发生这种情况,这让我非常恼火.

但这是我的解决方法:

在下面的示例中,复选框是"锁定"当前选项卡.所以检查意味着用户无法更改标签.

void Items_CurrentChanging(object sender, CurrentChangingEventArgs e)
{
    if (checkBox1.IsChecked.Value)
    {
        var item = ((ICollectionView)sender).CurrentItem;

        e.Cancel = true;

        tabControl1.SelectedItem = item;
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,发生的是(如果我理解正确的话)可视化树得到更新,但逻辑树却没有.上述方式强制视觉与逻辑树同步.