Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构建支持我自己的自定义事件的EventTriggerBehavior_C#_Wpf_Xaml_Mvvm_Windows Runtime - Fatal编程技术网

C# 构建支持我自己的自定义事件的EventTriggerBehavior

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

我用自己定制的事件构建了自己的UserControl(我从一个单独的程序集使用),在父项目中,我希望将这些事件与命令一起使用,因为它是一个MVVM应用程序,所有这些都是通过使用,如下所示:

<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,因为您缺少事件的冒泡和隧道。但我不知道这是否有效,我没有尝试,因为我还不需要泡泡或隧道。 如果有人有更好的解决方案,我将非常感谢阅读