XAML 暴露自定义用户控件中的事件- Window Store应用程序

huus2vyu  于 2022-12-16  发布在  其他
关注(0)|答案(3)|浏览(110)

我似乎在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中给它分配一个事件时,却找不到暴露的eventhandler。

<local:FoodItemControl thumbnailClicked="SOMETHING" />

我找到的示例中是否遗漏了什么?

EDIT:看起来我的问题是我将事件定义为EventHandler< StringEventArgs >。一旦我将其更改为简单的EventHandler(即

public event EventHandler thumbnailedClicked;

可是我还是不明白为什么?

mwkjh3gx

mwkjh3gx1#

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

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;
    }
}
jm2pwxwz

jm2pwxwz2#

也可以使用TypedEventHandler类型:

public event TypedEventHandler<FoodItemControl, StringEventArgs> thumbnailClicked;

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

hec6srdp

hec6srdp3#

我是从google来的,这是唯一一个与自定义控件中的事件处理程序相关的问题。对我来说,这个问题的根本原因很简单,但我花了很长时间才找到它,而你这么容易就把它读过头了。
这就是我所尝试的:

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

这是有效的方法:

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

忘了在EventHandler前面加上event了,注意用了问号?,因为我在这个winui3项目里有enabled the nullable feature,现在一切正常了,不需要再加什么复杂的东西了。

相关问题