Как использовать EventSetters со стилем окна? - PullRequest
2 голосов
/ 18 февраля 2010

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

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

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

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

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

Edit:

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

...

EDIT:

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

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

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

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

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

Кроме того, триггер для IsActive для обработки в xaml.

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

1 Ответ

1 голос
/ 18 февраля 2010

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

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

...