有没有办法删除以另一种样式定义的样式中的事件处理程序?
这是一个人为的例子:
<Style TargetType="{x:Type TextBox}" x:Key="DefaultTextBoxStyle">
<EventSetter Event="GotFocus" Handler="TextBox_GotFocus"/>
<EventSetter Event="LostFocus" Handler="TextBox_LostFocus"/>
<EventSetter Event="PreviewKeyUp" Handler="TextBox_PreviewKeyUp"/>
</Style>
<Style TargetType="{x:Type TextBox}" x:Key="InlineTextBox" BasedOn="{DynamicResource DefaultTextBoxStyle}">
<EventSetter Event="GotFocus" Handler="????"/> // set to nothing
<EventSetter Event="LostFocus" Handler="????"/> // set to nothing
<EventSetter Event="PreviewKeyUp" Handler="????"/> // set to nothing
</Style>
谢谢!
答案 0 :(得分:2)
通过阅读EventSetter,你必须有一个设置e.Handled的虚拟事件。 EventSetter声明,“在直接样式的处理程序之后,将调用指定为BasedOn的样式的事件设置器处理程序。”因此,这将使您的BasedOn中的任何EventSetter保持运行,除非它将自己标记为HandledEventsToo。
<Style TargetType="{x:Type TextBox}"
x:Key="EatEvents"
BasedOn="{StaticResource OtherStyle}">
<EventSetter Event="Click" Handler="EatEventsHandler"/>
</Style>
public void EatEventsHandler(object sender, RoutedEventArgs e)
{
e.Handled = true;
}