WPF:通过编程方式定义控制模板

时间:2011-08-03 11:10:30

标签: wpf templates controls

我们可以制作WPF自定义控件来覆盖某些控件的外观和感觉,就像图标按钮一样。

public class MyButton : Button {

    static MyButton()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyButton), new FrameworkPropertyMetadata(typeof(MyButton)));
    }
...
}

但我认为这种方式存在一些问题。当我分发Custom Cotrol'MyButton'时,它会引起一些问题。因为MyButton依赖于外部资源,所以WPF Style MyButton。所以我需要分发两个文件:MyButton.cs和MyButton.WPF。

那么,我如何通过编程方式确定Conotrol模板?

(原因是,解决问题的另一种方法是制作WPF用户控件。但我的观点不是那样。)

注意:我找到了一些有关此问题的资源。这是一个内联XAML脚本。但对我来说,XAML脚本不是选项。因为我正在学习WPF所以我想知道自己的WPF,而不是技巧。

1 个答案:

答案 0 :(得分:2)

您不分发代码,分发包含该类的dll和generic.xaml

这样,另一位设计师/开发人员可以“覆盖”该模板,并将您的模板作为安全后备保留。

修改

在代码中定义模板并不好玩(很多代码,难以调试,难以维护)但是可以做到:

var template = new ControlTemplate(typeof(MyControl));

<强> EDIT2

另一个黑客是在长字符串中指定模板并使用XAML Parser加载它。