在自定义用户控件中公开事件 - Window Store 应用程序

Jay*_*Dev 5 c# xaml user-controls windows-store-apps

我似乎在 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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

<local:FoodItemControl thumbnailClicked="SOMETHING" />
Run Code Online (Sandbox Code Playgroud)

我在我发现的示例中遗漏了一些东西吗?

编辑:我的问题似乎是我将事件定义为 EventHandler< StringEventArgs >。一旦我将其更改为简单的 EventHandler Ie,它就起作用了

public event EventHandler thumbnailedClicked;
Run Code Online (Sandbox Code Playgroud)

但我还是不太明白为什么?

小智 2

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)