Wpf 有没有办法取消TabControl.Items.CurrentChanging?
很遗憾,没有TabControl.SelectionChange事件(Selector.SelectionChange),我正在努力实现此行为,以便取消更改请求 我试图将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.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;
}
}
请参阅。注意:如果我没有取消活动,我还必须手动设置新选项卡。不知道为什么,否则账单就不会变。