我在XAML方面得到了以下解决方案,将事件绑定到命令,它可以正常工作。
参考
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
按钮定义:
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter" >
<i:InvokeCommandAction Command="{Binding FooCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
问题: 现在我需要在我的对象 FrameworkElementFactory 的代码中做同样的事情,但我无法理解,我想也许有人可以帮助我。
这是我停下的地方:
FrameworkElementFactory newLabel = new FrameworkElementFactory(typeof(Label));
newLabel.SetValue(Label.BackgroundProperty, Brushes.DarkMagenta);
var eventTrigger = new System.Windows.Interactivity.EventTrigger("MouseDown");
var invokeCommandAction = new System.Windows.Interactivity.InvokeCommandAction()
{
CommandName = "FooCommand",
CommandParameter = new Object()
};
有什么帮助吗?
提前致谢, 法扎德
答案 0 :(得分:1)
不太确定这是否是唯一的方法,但你可以使用Interaction.GetTriggers
加载触发器:
//<Your other code>
eventTrigger.Actions.Add(invokeCommandAction);
RoutedEventHandler loadedHandler = null;
loadedHandler = new RoutedEventHandler((s, _) =>
{
var label = s as Label;
var triggers = Interaction.GetTriggers(label);
triggers.Add(eventTrigger);
label.Loaded -= loadedHandler;
});
newLabel.AddHandler(FrameworkElement.LoadedEvent, loadedHandler);