none
在资源字典中对TreeViewItem或ListViewItem的样式的EventSetter设置事件关联。怎么使具体修改该style的eventSetter被保留继承? RRS feed

  • 问题

  • 在资源字典中为为ListViewItem或TreeViewItem该控件的style设置了EventSetter标签,并且绑定x:Class中的.cs文件的类中的事件代码。里面写了一些有关触发该事件的控件动画播放的c#代码或者其他的c#代码。如果在具体的控件引用该style,在ItemContainerStyle标签内,在进行一些具体的重写。

    这种设置,如果涉及对EventSetter的设置,那么对EventSetter的事件的handle进行了修改。会覆盖style原本的该EventSetter的事件中执行的代码(如果原本就设置了的话),这样的话原本该控件的事件被触发时执行的动画播放代码就不执行了。在这种情况下,如何使事件执行时,先执行或者后执行原本在资源字典中设置绑定的事件的代码,然后在执行在具体控件的ItemContainerStyle设置的事件代码?



    • 已编辑 Trian555 2019年1月23日 9:50
    2019年1月23日 9:48

全部回复

  • Hi    Trian555,

    你既然再Style中重写了EventSetter的模块,那就会覆盖之前的,不会执行之前的了。

    >> 在这种情况下,如何使事件执行时,先执行或者后执行原本在资源字典中设置绑定的事件的代码,然后在执行在具体控件的ItemContainerStyle设置的事件代码?

    你尝试BasedOn,通过这种方式,您将获得来自上述样式的setter,触发器,您可以提供自己的特定于ListView的EventSetter。 你可以设置多个EventSetter来处理多个不同的事件。

    你可以尝试下面2种方式。

    1: 在XAML 种定义多个EventSetter来覆盖继承样式的一个属性

    2: 通过在 代码种增加新的EventSetter。

                   var originalStyle = itemsControl.Style;
                    var newStyle = new Style();
                    newStyle.BasedOn = originalStyle;
    
                    newStyle.Setters.Add(new EventSetter(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(ItemsControl_PreviewMouseLeftButtonDown)));
                    itemsControl.ItemContainerStyle = newStyle;
    
    
    Best Regards,

    Yong Lu



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年1月24日 4:55
    版主