如何在WPAM中以XAML格式(可视树)获取现有控件的controltemplate? 这有助于在现有模板的帮助下创建新的控件模板。
答案 0 :(得分:34)
答案 1 :(得分:30)
样式以及模板示例已上架on MSDN以供下载,请参阅Default WPF Themes
link。
但是,您也可以使用BasedOn
属性扩展现有样式,而无需重新定义所有内容。
答案 2 :(得分:15)
如果你有Expression Blend,你可以:
执行此操作时,Blend将从控件中提取基本模板,并在文档/应用程序中将其显式声明为资源,然后您可以根据自己的喜好进行编辑。您可以为任何控件执行此操作。
答案 3 :(得分:3)
Matthew MacDonald撰写的“Pro WPF in C#2008”,第15章包含一个控制模板浏览器。我相信您只需从Apress网站下载示例代码即可。
答案 4 :(得分:2)
2020更新:
WPF组件的所有样式和模板现在都已移动here。
但是,在创建新组件之前,只需检查this来查看是否有替代方案(也许改变样式就可以了)。
注意:通常,它具有一堆DynamicResource绑定,您可能希望将其替换为静态绑定。如果您不想做很多手动工作,则可以考虑使用下面的第二种解决方案。
第二种较短的解决方案可能是使用Microsoft Blend通过以下步骤extract模板:
右键单击控件>
Edit Template
>Edit Current
或Edit a Copy
但是请小心,因为它并不总是导出整个模板,
但这是必不可少的部分。
只需考虑将此模板与上面提到的官方模板进行比较,以确保一切正常。
答案 5 :(得分:1)
您可以使用ShowMeTheTemplate
之类的工具答案 6 :(得分:1)
使用Microsoft Blend: 将整个XAML代码粘贴到此工具的文件中,然后右键单击要查看其可视树的控件:
选择选项: 编辑模板,然后你去
答案 7 :(得分:0)
XamlWriter类为您提供此功能。如果controlName
是控件的名称
然后使用下面的代码片段,您可以在stringBuilder
对象中获得控件模板的Xaml。
我想答案中提到的工具都会使用这个类。
var stringBuilder = new StringBuilder();
var xmlSettings = new XmlWriterSettings
{
Indent = true
};
using (var xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings))
{
XamlWriter.Save(controlName.Template, xmlWriter);
}