tabcontrol - wpf有一个取消 TabControl.Items.CurrentChanging的方法?

  显示原文与译文双语对照的内容
59 4

不幸的是没有 TabControl.SelectionChanging 事件( 选择器。SelectionChanging ),我正在努力实现这种行为,这样我就可以取消变更请求。

虽然我试图处理 TabControl.Items.CurrentChanging ( 。Items 属性和 ItemCollection ) 事件设置 e.Cancel ( 在 CurrentChangingEventArgs ),但是UI在集合中没有更改,但使用新的选项卡更新了 UI 。

有什么方法可以以防止用户在不满意的情况下切换到不同的TabItem

时间:原作者:0个回答

70 3

我不知道这发生的确切原因,这让我很恼火。

但这是我的解决方法:

在下面的示例中,复选框为当前选项卡。所以选中的意思是用户不能更改标签。

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

基本上,发生的是( 如果我正确理解),可以视化树被更新了,但逻辑树并不是。上面的方法强制可视化与逻辑树同步。

原作者:
100 1

在每个 TabItem 上也可以处理 PreviewLostKeyboardFocus事件,并将事件参数的属性设置为 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

原作者:
...