gpt4 book ai didi

wpf - Interactivity.EventTrigger 未订阅自定义路由事件

转载 作者:行者123 更新时间:2023-12-04 19:25:26 25 4
gpt4 key购买 nike

我在 DataTemplate 中有一个自定义行为,它引发了一个自定义路由事件。我想用 TriggerAction 处理该事件(发送消息、调用命令等)。

<Border Background="#01FFFFFF" VerticalAlignment="Center">
<i:Interaction.Behaviors>
<Behaviors:MyBehavior>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MyEvent">
<triggers:SendMessageAction Parameter="ActionTaskAssign" MessageToken="ActionTask" />
</i:CustomEventTrigger>
</i:Interaction.Triggers>
</Behaviors:DropBehavior>
</i:Interaction.Behaviors>
<!-- .... -->

但我可以清楚地看出,EventTrigger 没有订阅行为的 MyEvent。
  • 我尝试通过绑定(bind)设置 SourceObject(见 here),但 ElementName 绑定(bind)似乎不起作用,FindAncestor
  • 也不起作用
  • 我尝试从 EventTrigger 继承并在代码中设置 SourceObject,我得到的只是 StackOverflowException
  • 我试过写一个自定义的 EventTrigger,但是我要么为每个自定义事件写一个(如果一切都崩溃了,我会的),或者我必须找出一种通用的方法来处理非通用 RoutedEventHandler s...

  • 我该怎么办?

    最佳答案

    问题是 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);
    }
    ....

    }

    这里提出了一个相关问题:
    Handle MouseDragElementBehavior.Dragging event with void Foo() in VM

    我自己解决了这个问题,编写了自己的自定义行为来触发命令(我需要它而不是你的消息。

    您可以在此处的答案中看到我的方法:

    Custom behavior with command

    关于wpf - Interactivity.EventTrigger 未订阅自定义路由事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10321221/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com