在自定义用户控件中暴露事件-窗口商店应用程序
本文关键字:窗口 应用程序 事件 暴露 自定义 用户 控件 | 更新日期: 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
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项目中启用了可空特性。现在一切都正常了,不需要添加任何复杂的东西。