2009-08-06 68 views
3

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

这里是一个人为的例子:

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

谢谢!

回答

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; 
} 
+0

不会工作......它会像'this.GotFocus = null',这是不合法的。您只能通过+ =和 - = – 2009-08-06 14:21:49

+0

访问事件阅读...原来是基础:D – user7116 2009-08-06 14:34:19

+0

谢谢!看起来像现在最好的解决方案。 – djcouchycouch 2009-08-06 14:45:53