有没有一种方法可以取消TabControl.Items.CurrentChanging事件?

5
很遗憾,TabControl没有SelectionChanging事件(Selector.SelectionChanging),我正在努力实现此行为以便可以取消更改请求。
我尝试处理TabControl.Items.CurrentChanging(Items属性是ItemCollection)事件,将e.Cancel(CurrentChangingEventArgs的)设置为true,但是UI会使用新标签更新,尽管该项未在集合中更改。
当条件不满足时,有没有任何方法可以防止用户切换到不同的TabItem?
2个回答

6

我不知道这种情况发生的确切原因,而且这让我非常恼火。

但是这是我的解决方法:

在下面的示例中,复选框“锁定”当前标签页。因此,勾选意味着用户无法更改标签页。

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

        e.Cancel = true;

        tabControl1.SelectedItem = item;
    }
}

基本上,发生的情况是(如果我理解正确),视觉树得到更新,但逻辑树没有。上述方法会强制使视觉树与逻辑树同步。


注意:如果我不取消事件,我还必须手动设置新选项卡。不知道为什么,但否则标签页就不会改变。 - mennowo

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接