Wpf Interactivity.EventTrigger未订阅自定义路由事件
我在DataTemplate中有一个自定义行为,它引发一个自定义路由事件。我想用TriggerAction(发送消息、调用命令等)处理该事件Wpf Interactivity.EventTrigger未订阅自定义路由事件,wpf,behavior,eventtrigger,Wpf,Behavior,Eventtrigger,我在DataTemplate中有一个自定义行为,它引发一个自定义路由事件。我想用TriggerAction(发送消息、调用命令等)处理该事件 但我可以清楚地看出,EventTrigger并没有订阅行为的MyEvent 我尝试过通过绑定设置SourceObject(如图所示),但ElementName绑定似乎不起作用,FindAncestor也不起作用 我尝试从EventTrigger继承并在代码中设置SourceObject,得到的只是StackOverflowException 我尝试过
但我可以清楚地看出,EventTrigger并没有订阅行为的MyEvent
- 我尝试过通过绑定设置SourceObject(如图所示),但ElementName绑定似乎不起作用,FindAncestor也不起作用
- 我尝试从EventTrigger继承并在代码中设置SourceObject,得到的只是StackOverflowException
- 我尝试过编写一个自定义EventTrigger,但我要么为每个自定义事件编写一个(如果一切都不顺利,我会这样做),要么我必须找到一种通用方法来处理非通用的
sRoutedEventHandler
我该怎么办?问题是EventTrigger没有连接到行为的事件。相反,它连接到行为的关联对象的事件。以下是相关的源代码:
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);
}
....
}
这里提出了一个相关问题:
我通过编写自己的自定义行为来解决这个问题,该行为触发一个命令(我需要的是命令,而不是您的消息)
你可以在这里的答案中看到我的方法:
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);
}
....