Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 有没有办法取消TabControl.Items.CurrentChanging?_Wpf_Tabcontrol_Tabitem_Selectionchanging - Fatal编程技术网

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

Wpf 有没有办法取消TabControl.Items.CurrentChanging?,wpf,tabcontrol,tabitem,selectionchanging,Wpf,Tabcontrol,Tabitem,Selectionchanging,很遗憾,没有TabControl.SelectionChange事件(Selector.SelectionChange),我正在努力实现此行为,以便取消更改请求 我试图将TabControl.Items.CurrentChanging(Items属性为和ItemCollection)事件设置e.Cancel(属于CurrentChangingEventArgs)设置为true,但用户界面会用新选项卡更新,尽管该项在集合中没有更改 有什么方法可以防止用户在条件不满足时切换到不同的选项卡项?我不知道

很遗憾,没有TabControl.SelectionChange事件(Selector.SelectionChange),我正在努力实现此行为,以便取消更改请求

我试图将
TabControl.Items.CurrentChanging
Items
属性为和
ItemCollection
)事件设置e.Cancel(属于
CurrentChangingEventArgs
)设置为true,但用户界面会用新选项卡更新,尽管该项在集合中没有更改


有什么方法可以防止用户在条件不满足时切换到不同的
选项卡项

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

但我的解决办法是:

在下面的示例中,复选框“锁定”当前选项卡。所以选中表示用户不能更改选项卡

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

        e.Cancel = true;

        tabControl1.SelectedItem = item;
    }
}
基本上,发生的是(如果我理解正确的话)视觉树得到更新,但逻辑树没有。上述方法强制视觉对象与逻辑树同步

您还可以处理每个选项卡上的事件,并将事件参数的属性设置为
true
,以防止切换到其他选项卡:

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

请参阅。

注意:如果我没有取消活动,我还必须手动设置新选项卡。不知道为什么,否则账单就不会变。