WPF 自定义控件事件

本文关键字:事件 自定义控件 WPF | 更新日期: 2023-09-27 18:34:57

我想创建一个包含按钮和内容演示器的自定义 wpf 控件。由于 WPF 控件应该是无外观的,我创建了一个应该包含控件行为的类,并将控件的默认样式放在 generic.xaml 文件中。目前为止,一切都好。

但是,如何使按钮引发事件(路由事件?(并在控件的类中处理它呢?我发现我可以从 generic.xaml 为 ResourceDictionary 添加文件背后的代码,并将我的事件处理程序放在那里,但这会将我的控件的行为与其模板相关联,因此是不可取的。 我看到(但尚未尝试(的另一个想法是使用 TemplatePart 机制在模板中定位一些关键控件并订阅代码中的事件。但这对我来说似乎不够灵活,因为可能会发生我的控件的用户希望将按钮替换为在设计控件时没有任何我知道的事件的控件的情况。

那么,当单击按钮并在控件的代码文件中订阅它时,如何在 XAML 中引发事件呢?

WPF 自定义控件事件

重写控件的 OnApplyTemplate 方法。

这是您知道模板已应用的位置,您可以使用 GetTemplateChild 获取对控件的引用。

例如:

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
    var myButton = this.GetTemplateChild("myButton") as Button;
    if(myButton != null)
    {
        myButton.Click += ...;
}