Удаление обработчиков событий в стиле xaml? - PullRequest
3 голосов
/ 06 августа 2009

Есть ли способ удалить обработчики событий в стиле, который был определен в другом стиле?

Вот надуманный пример:

<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 Ответ

2 голосов
/ 06 августа 2009

После прочтения EventSetter у вас будет фиктивное событие, которое устанавливает e.Handled. EventSetter заявляет: «Обработчики установки событий из стиля, указанного как BasedOn, будут вызываться после обработчиков в непосредственном стиле». Так что это будет препятствовать запуску любого EventSetter в вашем BasedOn, если только он не помечен как 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...