使用DataTrigger动态设置事件处理程序

时间:2012-03-12 20:01:15

标签: wpf datatrigger eventsetter

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"}

1 个答案:

答案 0 :(得分:12)

不幸的是根据备注中的MSDN doc

  

请注意,仅Style.Setters支持EventSetter 对象。触发器   (TriggerBase和派生类)不支持支持EventSetter

在这种情况下,DataTrigger派生自TriggerBase,因此您无法使用它动态设置事件处理程序。我现在可以想到的解决方法可能是根据Turn的值动态切换样式。