silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了silverlight – SL4 / MVVM:在VM中处理带有void Foo()的MouseDragElementBehavior.Dragging事件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我试图在我拥有的控件上处理MouseDragElementBehavior.Dragging事件.有关我为什么要这样做的背景,请参阅 here. 我无法接通此事件.从XAML中您可以看到我已向用户控件添加了一个行为.然后我尝试通过CallMethodAction Eventtrigger向行为的Dragging事件添加一个处理程序. <i:Interaction.behaviors> <e
我试图在我拥有的控件上处理MouseDragElementBehavior.Dragging事件.有关我为什么要这样做的背景,请参阅 here.

我无法接通此事件.从XAML中您可以看到我已向用户控件添加一个行为.然后我尝试通过CallMethodAction Eventtrigger向行为的Dragging事件添加一个处理程序.

<i:Interaction.behaviors>
    <ei:MouseDragElementBehavior ConsTrainToParentBounds="True">
        <i:Interaction.triggers>
            <i:Eventtrigger EventName="Dragging">
                <ei:CallMethodAction MethodName="NotifyChildrenYouAreDragging" TargetObject="{Binding}"/>
            </i:Eventtrigger>
        </i:Interaction.triggers>
    </ei:MouseDragElementBehavior>
</i:Interaction.behaviors>

我试过以下方法签名没有运气:

void NotifyChildrenYouAreDragging(){}
void NotifyChildrenYouAreDragging(object sender,EventArgs E){}
void NotifyChildrenYouAreDragging(object sender,MouseEventArgs E){}

任何人都有使用触发器处理附加行为事件的经验吗?

解决方法

问题是Eventtrigger没有连接到Behavior的事件.相反,它正在连接到Behavior的AssociatedObject的事件.这是相关的源代码

protected override void OnAttached()
    {
        base.onAttached();
        DependencyObject associatedObject = base.AssociatedObject;
        Behavior behavior = associatedObject as Behavior;
        FrameworkElement element = associatedObject as FrameworkElement;
        this.RegistersourceChanged();
        if (behavior != null)
        {
            associatedObject = ((IAttachedObject) behavior).AssociatedObject;
            behavior.AssociatedObjectChanged += new EventHandler(this.OnBehaviorHostChanged);
        }
        ....
  }

因此,您可以看到,如果触发器的关联对象是行为,则它将关联对象设置为行为的关联对象,即对象集合. items集合没有拖动事件,所以什么都没有被触发.

您可以通过创建另一个检查相关对象是否具有拖动行为的行为来获得所需的结果,如果是,则将您的行为附加到拖动事件.然后从那里调用对象上的方法.

大佬总结

以上是大佬教程为你收集整理的silverlight – SL4 / MVVM:在VM中处理带有void Foo()的MouseDragElementBehavior.Dragging事件全部内容,希望文章能够帮你解决silverlight – SL4 / MVVM:在VM中处理带有void Foo()的MouseDragElementBehavior.Dragging事件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。