C# 构建支持我自己的自定义事件的EventTriggerBehavior
我用自己定制的事件构建了自己的UserControl(我从一个单独的程序集使用),在父项目中,我希望将这些事件与命令一起使用,因为它是一个MVVM应用程序,所有这些都是通过使用,如下所示:C# 构建支持我自己的自定义事件的EventTriggerBehavior,c#,wpf,xaml,mvvm,windows-runtime,C#,Wpf,Xaml,Mvvm,Windows Runtime,我用自己定制的事件构建了自己的UserControl(我从一个单独的程序集使用),在父项目中,我希望将这些事件与命令一起使用,因为它是一个MVVM应用程序,所有这些都是通过使用,如下所示: <mediaPlayerControl:PlayerControl> <interactivity:Interaction.Behaviors> <core:EventTriggerBehavior EventName="F
<mediaPlayerControl:PlayerControl>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ForwardClicked">
<core:InvokeCommandAction Command="{Binding OnForwardClicked, Mode=TwoWay}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</mediaPlayerControl:PlayerControl>
问题是EventTriggerBehavior只支持前面提到的一些特定事件,因此我在事件上使用的命令不会触发,现在,我想做的是,构建提供相同体验的行为,并支持我自己的事件:我希望它们看起来类似于:
<mediaPlayerControl:PlayerControl>
<interactivity:Interaction.Behaviors>
<core:ExtensionsEventTriggerBehavior EventName="ForwardClicked">
<core:ExtensionsInvokeCommandAction Command="{Binding OnForwardClicked, Mode=TwoWay}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</mediaPlayerControl:PlayerControl>
我已经阅读了很多关于实现此类行为的文章,但我还没有弄清楚,因为这是我第一次用这种方式处理这些行为,我希望你能告诉我怎么做。首先,你通常不会在UserControls XAML页面中添加行为,您将在使用UserControl的XAML页面上添加该行为,因此我认为您需要如下内容: 您只需将类型为
EventHandler
的公共事件(例如“ForwardButtonClicked”)添加到UserControl的Codebehind:
public event EventHandler ForwardButtonClicked;
然后还必须添加EventHandler方法,以便在视图上单击按钮时触发事件。因此,您需要在usercontrol的构造函数中添加eventhandlermethod:
public PlayerControl()
{
this.InitializeComponent();
_forwardButton.Click += this.ForwardButtonClickedEventHandler;
}
Eventhandler看起来像:
private void ForwardButtonClickedEventHandler(object sender, RoutedEventArgs eventArgs)
{
if(this.ForwardButtonClicked != null)
{
this.ForwardButtonClicked.Invoke(sender, new EventArgs());
}
}
然后可以将UserControl添加到XAML页面,并为UserControl的ForwardButtonClicked事件添加EventTriggerBehavior。
由于WinRT中不支持自定义RoutedEvents,您可以使用默认的单击RoutedEventHandler,而不是普通的C#EventHandler,因为您缺少事件的冒泡和隧道。但我不知道这是否有效,我没有尝试,因为我还不需要泡泡或隧道。
如果有人有更好的解决方案,我将非常感谢阅读