2

我已经设计了一个窗口来替换标准 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>
4

1 回答 1

1

你能粘贴你完整的风格声明吗?样式的目标类型可能存在问题。Loaded是在FrameworkElement上定义的,而Activated是在Window上定义的。尝试将TargetType={x:Type Window}设置为样式元素中的属性。

编辑:激活不是路由事件。因此,不可能在您的风格中使用它。或者,您可以在后面的代码中订阅此事件。

于 2010-02-17T23:47:42.407 回答