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

时间:2010-11-16 12:51:07

标签: wpf tabcontrol tabitem selectionchanging

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

我尝试将TabControl.Items.CurrentChangingItems属性和ItemCollection)事件设置e.Cancel(CurrentChangingEventArgs)设置为true,但UI是虽然该集合中的项目未更改,但使用新选项卡进行了更新。

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

2 个答案:

答案 0 :(得分:5)

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

但这是我的解决方法:

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

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

        e.Cancel = true;

        tabControl1.SelectedItem = item;
    }
}

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

答案 1 :(得分:0)

您还可以处理每个PreviewLostKeyboardFocus上的TabItem事件,并将事件参数的Handled属性设置为true,以防止切换到另一个标签:

protected void tabItem_PreviewLostKeyboardFocus(object sender,
    KeyboardFocusChangedEventArgs e)
{
    if (!ValidateTabItem((TabItem) sender)) {
        e.Handled = true;
    }
}

请参阅http://www.netframeworkdev.com/windows-presentation-foundation-wpf/how-to-cancel-navigation-between-tabitems-in-a-tabcontrol-84994.shtml