2009-08-06 63 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