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

标签 c# wpf xaml mvvm windows-runtime

我使用自己的自定义事件构建了自己的 UserControl(我从单独的程序集中使用),在父项目中我想将这些事件与 Commands 一起使用,因为它是一个 MVVM 应用程序,全部使用 Behaviors SDK (XAML) for Visual Studio 2013 ,如下:

<mediaPlayerControl:PlayerControl>
            <interactivity:Interaction.Behaviors>
                <core:EventTriggerBehavior EventName="ForwardClicked">
                    <core:InvokeCommandAction Command="{Binding OnForwardClicked, Mode=TwoWay}"/>
                </core:EventTriggerBehavior>
            </interactivity:Interaction.Behaviors>
</mediaPlayerControl:PlayerControl>

问题是 EventTriggerBehavior 仅支持某些特定事件,如前所述 here ,因此我在我的事件中使用的命令不会触发,现在,我想做的是构建提供相同体验并支持我自己的事件的行为:我希望它们看起来类似于:

<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 的公共(public)事件,例如“ForwardButtonClicked”到您的用户控件的代码隐藏:

public event EventHandler ForwardButtonClicked;

然后您还必须添加一个 EventHandler 方法,以便在单击 View 上的按钮时触发您的事件。因此,您将在用户控件的构造函数中添加一个事件处理程序方法:

public PlayerControl()
{
  this.InitializeComponent();
  _forwardButton.Click += this.ForwardButtonClickedEventHandler;
}

事件处理程序看起来像:

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

关于c# - 构建支持我自己的自定义事件的 EventTriggerBehavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20845169/

相关文章:

c# - 使用类在 ListView 上实现初始排序

c# - WPF 工具包饼图不显示

c# - DependencyProperty 字符串,onChange while typing

c# - 评估元素 'System.Windows.Controls.TextBlock' 上的 ThemeStyle 属性时发现循环引用

c# - "The invocation of the constructor on type ' TestWPF.MainWindow ' that matches the specified binding constraints threw an exception."- 如何解决这个问题?

c# - 如何在 windows 8 facebook 应用程序中邀请好友?

c# - Twitter API - OOB 流

WPF如何控制ListCollectionView的绑定(bind)方法?

.net - 如何创建自定义WPF控件,例如具有恒定角的卡通气泡

wpf - 在标签上显示标准文本?