40

如何以 XAML 格式(可视树)在 WPF 中获取现有控件的 ControlTemplate?这是为了帮助在现有模板的帮助下创建新的 ControlTemplate。

4

8 回答 8

37

查看StyleSnooper

在此处输入图像描述

它将为内置控件转储标准样式(因此也包含模板)。您还可以加载包含 WPF 控件的特定 DLL 并查看这些控件的默认样式。

于 2009-10-13T10:42:57.267 回答
30

样式和模板示例在 MSDN 上可供下载,请参阅Default WPF Themes链接

但是,您也可以扩展现有样式,而无需使用BasedOn属性重新定义所有内容。

于 2009-10-13T14:21:14.970 回答
18

如果您有Expression Blend,您可以:

  1. 将控件拖到设计图面上
  2. 右键单击控件并选择编辑模板 -> 编辑副本

当您执行此操作时,Blend 将从控件中提取基本模板,并在文档/应用程序中明确将其声明为资源,然后您可以根据自己的喜好对其进行编辑。您可以对任何控件执行此操作。

于 2009-10-13T12:58:11.443 回答
3

Matthew MacDonald 的“Pro WPF in C# 2008”一书在第 15 章中包含了一个控制模板浏览器。我相信您可以从 Apress 网站下载示例代码。

于 2009-12-19T13:15:08.090 回答
2

2020 年更新:

WPF 组件的所有样式和模板现在都移到了这里
但是,在创建一个新组件之前,只需检查一下,看看你是否有一个好的替代方案(也许改变样式可以工作)。
注意:通常,它有一堆 DynamicResource 绑定,您可能想用您的绑定替换它们并使其成为静态。如果您不想做太多手动工作,您可以考虑使用下面的第二种解决方案。

第二种和更短的解决方案可能是使用 Microsoft Blend 通过以下步骤 提取模板:

右键单击控件 > Edit Template>Edit CurrentEdit a Copy

但是要小心这个,因为它并不总是导出整个模板,
而是导出它的必要部分。
只需考虑将此模板与官方模板(如上所述)进行比较,以确保一切正常。

于 2020-03-22T21:11:07.200 回答
1

您可以使用ShowMeTheTemplate 之类的工具

于 2009-10-13T10:09:51.030 回答
1

为此使用 Microsoft Blend:将整个 XAML 代码粘贴到此工具的文件中,然后右键单击要感知其可视化树的控件:

选择选项:编辑模板,然后就可以了

于 2013-06-15T06:04:01.907 回答
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);
}
于 2013-09-26T18:59:17.073 回答