删除xaml样式的事件处理程序?

时间:2009-08-06 14:02:27

标签: c# wpf xaml event-handling

有没有办法删除以另一种样式定义的样式中的事件处理程序?

这是一个人为的例子:

<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>

谢谢!

1 个答案:

答案 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;
}