10

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

我用数据触发器为我的控件设计了一种样式,我检查了它的绑定并使用BorderThickness 属性的常规属性设置器进行了尝试,只是为了查看数据触发器是否有效。(它确实..)

当使用事件设置器以与常规属性设置器相同的方式满足数据触发器的条件时,如何应用我的数据触发器来附加事件处理程序?

类似于:

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

1 回答 1

17

不幸的是,根据备注下的MSDN 文档:

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

在这种情况下,DataTrigger 是从 TriggerBase 派生的,因此您不能使用它来动态设置事件处理程序。我现在能想到的一种解决方法可能是根据Turn.

于 2012-03-12T22:31:37.850 回答