Как использовать EventSetters со стилем окна?

Я разработал окно для замены стандартного Chrome, и я хочу обрабатывать события "Активировано" и "Деактивировано" с помощью EventSetters. Я получаю сообщение об ошибке "...'Activated' должен быть зарегистрирован RoutedEvent..." с этим:

  <EventSetter Event="Activated" Handler="Window_Activated"/>

Тем не менее, это прекрасно работает в том же стиле.

  <EventSetter Event="Loaded" Handler="Window_Loaded"/>

Кто-нибудь сталкивался с этим или знает, что случилось?

Редактировать:

<Style x:Key="Window_Cartesia" TargetType="{x:Type Window}">

  <Setter Property="WindowStyle" Value="None"/>
  <Setter Property="AllowsTransparency" Value="True"/>

  <Setter Property="Background" Value="Transparent"/>

  <EventSetter Event="Loaded" Handler="Loaded"/>

  <EventSetter Event="Activated" Handler="Window_Activated"/>

  <EventSetter Event="KeyDown" Handler="KeyDown"/>

...

РЕДАКТИРОВАТЬ:

Это, кажется, покрывает это.

Определено в событии Loaded:

AddHandler Win.Activated, AddressOf Activated
AddHandler Win.Deactivated, AddressOf Deactivated

Поскольку это код для стиля, мне нужна ссылка на экземпляр Win. Я не знаю, если это лучший способ сделать это, но...

РЕДАКТИРОВАТЬ 1:

В качестве альтернативы, триггер для IsActive для обработки его в xaml.

<Trigger Property="IsActive" Value="True">
...
</Trigger>

1 ответ

Решение

Не могли бы вы вставить свою полную декларацию стиля? Может быть проблема с целевым типом стиля. Loaded определяется в FrameworkElement, а Activated определяется в Window. Попробуйте установить TargetType={x:Type Window} в качестве атрибута элемента style.

Изменить: Активировано не маршрутизируемое событие. Поэтому невозможно использовать его в вашем стиле. Кроме того, вы можете подписаться на это событие в коде позади.

Другие вопросы по тегам