Removing xaml-style event handlers?

Is there a way to remove event handlers in a style that was defined in a different style?

Here is a contrived example:

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

Thanks!

+3
source share
1 answer

From reading EventSetter you will need to have a dummy event that sets e.Handled. EventSetter states: "Event setting handlers from the style specified as BasedOn will be called after the handlers in the immediate style." Thus, this will not trigger any EventSetter in your BaseOnOn unless it is designated as 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;
}
+2
source

Source: https://habr.com/ru/post/1714512/


All Articles