看来,WPF TabControl
不支持取消选择变化的能力,因为没有SelectionChanging()
事件,只有SelectionChanged
事件。有没有人想出一个办法做到这一点?
我发现的唯一方法是附加到每个PreviewMouseLeftButtonDown()
的TabItem
事件,并e.Handled
到true
如果我不希望选择特定页面做。这似乎是工作,但非常笨拙。
我找到了一种方法做为此使用了一个TabItem的样式,然后结合Focusable属性来控制行为的布尔值。获取绑定到父视图模型有点靠不住但很可能得到改善。
这是不错的,因为它避免了如果用户使用键盘例如可能不会被解雇点击事件的技巧。
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Focusable" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.IsUpToDate}" />
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding Group}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>