我设置了一个替换标准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>
答案 0 :(得分:1)
您可以粘贴完整的样式声明吗?样式的目标类型可能存在问题。在 FrameworkElement 上定义已加载,而在窗口上定义已激活。尝试将 TargetType = {x:Type Window} 设置为样式元素中的属性。
修改:已激活不是路由事件。因此无法在您的风格中使用它。或者,您可以在后面的代码中订阅此事件。