如何将EventSetter与Window Style一起使用?

时间:2010-02-17 22:13:18

标签: wpf styles window eventsetter

我设置了一个替换标准Chrome的窗口,我希望使用EventSetters处理Activated和Deactivated事件。我得到一个错误“......'已激活'必须是一个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 个答案:

答案 0 :(得分:1)

您可以粘贴完整的样式声明吗?样式的目标类型可能存在问题。在 FrameworkElement 上定义已加载,而在窗口上定义已激活。尝试将 TargetType = {x:Type Window} 设置为样式元素中的属性。

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