我无法接通此事件.从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事件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)