iv有几项物品控制,我需要为它们附加一个事件处理程序 PreviewMouseLeftButtonDown事件仅在满足特定条件时才会发生。
iv为我的控件设计了一个带有数据触发器的样式,我检查了它的绑定并尝试使用常规属性设置器作为BorderThickness属性来查看datatrigger的工作原理 。 (确实......)
当使用事件设置器以与常规属性设置器相同的方式满足datatrigger的条件时,如何应用我的数据触发器来附加事件处理程序?
类似于:
<Style TargetType="{x:Type ItemsControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding Turn}" Value="True">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemsControl_MouseLeftButtonDown"></EventSetter>
</DataTrigger>
</Style.Triggers>
</Style>
此标记在eventsetter行上抛出以下异常:
'Set property 'System.Windows.EventSetter.Event' threw an exception.'
内部例外:
{"Value cannot be null.\r\nParameter name: value"}
答案 0 :(得分:12)
不幸的是根据备注中的MSDN doc:
请注意,仅Style.Setters支持EventSetter 对象。触发器 (TriggerBase和派生类)不支持支持EventSetter
在这种情况下,DataTrigger派生自TriggerBase,因此您无法使用它动态设置事件处理程序。我现在可以想到的解决方法可能是根据Turn
的值动态切换样式。