Как использовать 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.
Изменить: Активировано не маршрутизируемое событие. Поэтому невозможно использовать его в вашем стиле. Кроме того, вы можете подписаться на это событие в коде позади.