在自定义用户控件中暴露事件-窗口商店应用程序

本文关键字:窗口 应用程序 事件 暴露 自定义 用户 控件 | 更新日期: 2023-09-27 18:12:15

我似乎在Xaml中暴露事件时有问题。我已经像这样在自定义用户控件中声明了一个公共事件处理程序。

public sealed partial class FoodItemControl : UserControl
{
    public event EventHandler<StringEventArgs> thumbnailClicked;
    public FoodItemControl()
    {
        InitializeComponent();
        (this.Content as FrameworkElement).DataContext = this;
    }

    private void Thumbnail_Tapped(object sender, TappedRoutedEventArgs e)
    {
        var handler = thumbnailClicked;
        if (handler != null)
        {
            handler(this, new StringEventArgs());
        }
    }
}

但是当我在xaml中分配一个事件给它时,无法找到暴露的事件处理程序。即

<local:FoodItemControl thumbnailClicked="SOMETHING" />

我在我发现的例子中错过了什么吗?

EDIT:似乎我的问题是我将事件定义为eventandler 。一旦我将其更改为简单的EventHandler即

,它就可以工作了
public event EventHandler thumbnailedClicked;

然而我仍然不明白为什么?

在自定义用户控件中暴露事件-窗口商店应用程序

您必须创建一个依赖属性并注册该属性以在用户控件中公开它:

public sealed partial class FoodItemControl : UserControl
{
    public EventHandler thumbnailClicked
    {
        get { return (EventHandler)GetValue(thumbnailClickedProperty); }
        set { SetValue(thumbnailClickedProperty, value); }
    }
    public static readonly DependencyProperty thumbnailClickedProperty =
  DependencyProperty.Register("thumbnailClicked", typeof(EventHandler),
    typeof(FoodItemControl), new PropertyMetadata(""));

    public FoodItemControl()
    {
        this.InitializeComponent();
        (this.Content as FrameworkElement).DataContext = this;
    }
}

您也可以使用TypedEventHandler类型:

public event TypedEventHandler<FoodItemControl, StringEventArgs> thumbnailClicked;

允许您指定自己的事件参数类,该类派生自EventArgs

我从google来到这里,这是唯一的问题,与自定义控件中的事件处理程序相关。对我来说,问题的根本原因很简单,但我花了很长时间才找到它,而你读得太容易了。

这就是我所尝试的:

public EventHandler<IList<Guid>>? MyCustomEvent;
public EventHandler? MyCustomEvent2;

是这样的:

public event EventHandler<IList<Guid>>? MyCustomEvent;
public event EventHandler? MyCustomEvent2;

我忘记在EventHandler前面加event了。注意,这里使用了问号?,因为我在这个winui3项目中启用了可空特性。现在一切都正常了,不需要添加任何复杂的东西。