如何抓取WPF 4.0控件默认模板?

时间:2010-08-19 21:24:52

标签: wpf wpf-controls

我一直在使用Expression Blend来复制WPF 4.0控件的默认模板。我正在编写一篇关于扩展WPF控件的CodeProject文章,我想推荐一个免费工具作为替代方案。你会建议什么?谢谢你的帮助。

6 个答案:

答案 0 :(得分:8)

XamlPadX有一个“打开/关闭样式窗口”按钮,显示很少的对话框,允许您查看样式。

alt text

答案 1 :(得分:5)

在以前的WPF版本中,此MSDN链接提供了样式。您可以尝试更改为旧版本,以查看下载链接。不幸的是,尚未针对.NET 4.0进行更新。

在此之前,如果您使用BamlViewer插件,可以使用Reflector。安装完成后,使用Open Cache打开其中一个程序集:

  1. PresentationFramework.Aero
  2. PresentationFramework.Classic
  3. PresentationFramework.Luna
  4. PresentationFramework.Royale
  5. 确保选择4.0.0.0版本。然后展开程序集和关联的Resources节点。选择资源条目并按空格键查看反汇编程序。然后,您可以看到BAML文件,您可以使用BamlViewer查看XAML。唯一的缺点是你失去了原来的格式。

    编辑:

    可以从here下载.NET 4样式。更具体地说,第二段中的Default WPF Themes链接。或者,您可以深入查看特定控件以查看样式示例。

答案 2 :(得分:3)

MSDN列出了Silverlight控件:
http://msdn.microsoft.com/en-us/library/cc278069(VS.95).aspx

但我找不到类似的WPF控件列表。相应的WPF页面是这个并且神秘地缺少模板列表:
http://msdn.microsoft.com/en-us/library/ms753328.aspx

无论如何,抓取模板很容易。从这里:
http://msdn.microsoft.com/en-us/magazine/cc163497.aspx#S1

Control ctrl = GetControl(); // any type deriving from Control

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = new string(' ', 4);
settings.NewLineOnAttributes = true;
StringBuilder strbuild = new StringBuilder();
XmlWriter xmlwrite = XmlWriter.Create(strbuild, settings);

// Save the template to the XAML writer
XamlWriter.Save(ctrl.Template, xmlwrite);

答案 3 :(得分:3)

现在可以找到WPF 4.0控件的控件模板here

但是,您可以使用Style.BasedOn属性扩展或覆盖控件模板,而无需重现原始文件。它在this blog post中解释。

答案 4 :(得分:0)

请看一下这篇文章:http://eggheadcafe.com/tutorials/aspnet/d1ad0a33-d815-4083-8e97-c234fd661095/wpf-controls-default-style-or-template-by-extending-the-wpf-designer-in-visual-studio-2010.aspx。我已经扩展了WPF设计器,包括通过所选控件的上下文菜单获取默认样式或模板。只需构建Visual Studio解决方案并设置注册表项以加载元数据。缺点是XAML格式不像Expression Blend那样。

答案 5 :(得分:0)

或安装Expression Blend(试用版)并转到以下位置:

C:\Program Files\Microsoft Expression\Blend 4\SystemThemes\Wpf