我有一个Label
,我试图改变MouseDown
事件,如果用户登录或不使用Trigger
。
<Label x:Name="lblSave" MouseDown="lblSave_MouseDown" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" ToolTip="Save Files" Width="25" Height="25" Margin="0, 0, 5, 0" >
<Label.Style>
<Style TargetType="{x:Type Label}">
<Setter Property="Background" Value="{DynamicResource ResourceKey=saveIcon}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Source={x:Static sec:Security.Instance}, Path=IsLoggedIn}" Value="False">
<Setter Property="Background" Value="{DynamicResource ResourceKey=readonlyIcon}" />
<EventSetter Event="MouseDown" Handler="lblNoAccess_MouseDown" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
但是,与这篇文章相反,我所拥有的将不起作用,因为MouseDown
不是路由事件。我仍然得到System.Windows.EventSetter.Event
错误:{"Value cannot be null.rnParameter name: value"}
.
所以我的问题是,是否有一种方法可以使用触发器来设置非路由事件?
来自文档:
注意只有Style。setter支持EventSetter对象。触发器(TriggerBase和派生类)不支持EventSetter。
(也如评论中所述,MouseDown
是路由的)
就像H.B.说你不能在触发器集合中使用EventSetter,你应该在事件处理程序中检查它是否被记录并执行正确的代码,这个解决方案不适合你吗?