1

我想创建一个包含 Button 和 ContentPresenter 的自定义 wpf 控件。由于 WPF 控件应该是无外观的,因此我创建了一个应该包含控件行为的类,并将控件的默认样式放在 generic.xaml 文件中。到目前为止,一切都很好。

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

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

4

1 回答 1

2

重写控件的OnApplyTemplate方法。

那是您知道模板已被应用的地方,您可以使用 GetTemplateChild 获取对控件的引用。

例如:

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();
    var myButton = this.GetTemplateChild("myButton") as Button;
    if(myButton != null)
    {
        myButton.Click += ...;
}
于 2012-05-22T05:51:46.157 回答