5

不幸的是,没有 TabControl.SelectionChanging 事件 (Selector.SelectionChanging),我正在努力实现此行为,因此我可以取消更改请求。

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

TabItem当条件不满意时,有什么方法可以防止用户切换到另一个?

4

2 回答 2

6

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

但这是我的解决方法:

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

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

        e.Cancel = true;

        tabControl1.SelectedItem = item;
    }
}

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

于 2010-11-16T13:22:32.917 回答
0

您还可以处理每个TabItem上的PreviewLostKeyboardFocus事件,并将事件参数的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

于 2010-11-16T13:27:51.463 回答