【问题标题】:WPF : Definition Control Template by programmaticallyWPF:以编程方式定义控制模板
【发布时间】:2011-10-19 00:36:36
【问题描述】:

我们可以制作 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。

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

(当然,解决问题的另一种方法是制作 WPF 用户控件。但我的意思不是那样。)

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

【问题讨论】:

    标签: wpf templates controls


    【解决方案1】:

    你不分发代码,你分发一个包含类和 generic.xaml 的 dll

    这样,其他设计人员/开发人员可以“覆盖”模板,您的模板仍可作为安全的后备。

    编辑

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

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

    EDIT2

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

    【讨论】:

    • 谢谢。但问题仍然存在。当我通过源代码而不是程序集分发自定义控件时,我需要包含两个文件:XAML 和 .cs。坦率地说,我的兴趣是通过编程方式定义控制模板,而不是分发。谢谢。
    • 然后使用我回答的已编辑部分中的部分。另一个技巧是在长字符串中指定模板并使用 XAML Parser 加载它。
    • @mjk6026,顺便说一句:xaml 也是 WPF。只是写同一件事的另一种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2015-12-09
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多