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

era*_*zap 7 wpf datatrigger eventsetter

我有几个项目控件,只有在满足某个条件时才需要为其PreviewMouseLeftButtonDown事件附加一个事件处理程序.

我用一个数据触发器为我的控件设计了一个样式,我检查了它的绑定并尝试使用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>
Run Code Online (Sandbox Code Playgroud)

此标记在eventsetter行上抛出以下异常:

    'Set property 'System.Windows.EventSetter.Event' threw an exception.' 
Run Code Online (Sandbox Code Playgroud)

内在例外:

       {"Value cannot be null.\r\nParameter name: value"}
Run Code Online (Sandbox Code Playgroud)

Xia*_* Yu 12

不幸的是根据MSDN doc备注:

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

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