【发布时间】:2011-04-01 09:08:56
【问题描述】:
我一直在使用 Expression Blend 来复制 WPF 4.0 控件的默认模板。我正在写一篇关于扩展 WPF 控件的 CodeProject 文章,我想推荐一个免费工具作为替代方案。你有什么建议?感谢您的帮助。
【问题讨论】:
标签: wpf wpf-controls
我一直在使用 Expression Blend 来复制 WPF 4.0 控件的默认模板。我正在写一篇关于扩展 WPF 控件的 CodeProject 文章,我想推荐一个免费工具作为替代方案。你有什么建议?感谢您的帮助。
【问题讨论】:
标签: wpf wpf-controls
XamlPadX 有一个“打开/关闭样式窗口”按钮,它显示了一个小对话框,可让您查看样式。
【讨论】:
在 WPF 的早期版本中,样式可在此 MSDN 链接中找到。您可以尝试更改为旧版本,以查看下载链接。不幸的是,这还没有针对 .NET 4.0 进行更新。
在此之前,如果您可以将 Reflector 与 BamlViewer 插件一起使用。安装后,您将使用 Open Cache 打开这些程序集之一:
确保选择 4.0.0.0 版本。然后展开程序集和关联的资源节点。选择资源条目并按空格键查看反汇编程序。然后您可以看到 BAML 文件,您可以使用 BamlViewer 查看 XAML。唯一的缺点是您会丢失原始格式。
编辑:
.NET 4 样式可以从here 下载。更具体地说,第二段中的Default WPF Themes 链接。或者,您可以深入了解特定控件以查看样式示例。
【讨论】:
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);
【讨论】:
现在可以在 here 找到 WPF 4.0 控件的控件模板。
但是,您可以使用Style.BasedOn 属性扩展或覆盖控件模板,而无需复制原始模板。在this blog post中有解释。
【讨论】:
请看这篇文章: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 不同。
【讨论】:
或安装 Expression Blend(试用版)并转到以下位置:
C:\Program Files\Microsoft Expression\Blend 4\SystemThemes\Wpf
【讨论】: