我能帮您翻译成中文。您所问的问题是:“我在哪里可以找到默认的WPF控件模板?”

51
根据这个 MSDN 链接,控件的可视树无法仅替换部分内容;若要更改控件的可视树,必须将控件的模板属性设置为其新的完整 ControlTemplate。
我试图禁用 GridViewColumnHeader 的点击行为(需要删除原始控件模板中的一些触发器),但我找不到本机的“ColumnHeaderContainerStyle”。所有我找到的似乎都已经进行了一些自定义,很难获得原始的外观和感觉。请问有人可以建议我在哪里获取原生 WPF 控件中定义的原始控件模板吗?
感谢您的关注。

使用 Reflector 和 Baml 插件查看默认模板的 XAML,或者您可以在代码中禁用 Grid 行为? - Lukasz Madon
可能是在WPF中为现有控件创建控件模板的重复问题。 - stil
看起来ILSpy现在也可以做到这一点;以及Expression Blend和Visual Studio也能够提取许多内置的内容。 - BrainSlugs83
6个回答

31
在Visual Studio 2015中(至少是),您可以在XAML设计器中右键单击控件,然后选择“编辑样式->复制并编辑”以查看和编辑控件的默认模板。这比打开Blend、下载样式查看器或搜索网络要容易得多。

这就是我在寻找的答案。在 Visual XAML 设计器中放置控件,右键单击并转到“编辑模板->编辑副本...” - lot
1
这对我不起作用。是的,我得到了一些“默认值”,但它不是我在我的Windows 10机器上看到的! - Lumo
顺便说一句:当我在 Blend 中操作时,我得到了正确的默认模板! - Lumo
1
当你“编辑副本”时,它会创建当前样式的副本。在选择“编辑副本”之前,我只是将该样式注释掉以使用默认模板。 - Rachel Martin

21
您可以在Microsoft Docs找到所有主题的模板。

此外,有几个工具可以从程序集中读取样式。
例如,您可以使用Style Snooper
但是,针对您的情况(获取内置模板),上述文档链接应该是最简单的方法。


4
Blend也可以提取默认设置。 - user7116
Style Snooper 的链接已经过时。 - Mathias Lykkegaard Lorenzen
13
所有这些链接现在都不再可用,但是您可以在开发计算机上的Visual Studio目录下找到这些模板(对于我来说是:C:\Program Files (x86)\Microsoft Visual Studio 14.0\DesignTools\SystemThemes\Wpf\aero2.normalcolor.xaml)。请注意,切勿更改原意。 - Ties

15

我通过谷歌多次搜索得到了这个问题,但是没有找到我想要的链接,所以在这里提供给大家...


这些链接为每个框架控件提供以下信息:

  • 命名的模板部分
  • 视觉状态
  • 完整的 XAML 默认控件模板和资源

3
WPF的链接已损坏。 - Onur
这些只是示例 - 它们并不反映默认样式,它们只涵盖了大部分内容。您会注意到按钮具有蓝色的色调,这不是 WPF 中按钮的默认设置。 - G.Y
3
如果您正在寻找WPF,请尝试访问此链接:https://msdn.microsoft.com/en-us/library/aa970773(v=vs.110).aspx - Corin
1
Corin,这些不是标准值。 - peter70
似乎链接又坏了(澄清一下,页面可以加载,但选择一个控件查看数据会跳转到404页面)。@MikeNakis的下面的答案有效。 - BrainSlugs83

4

针对vs2022社区版:C:\Program Files\Microsoft Visual Studio\2022\Community\DesignTools\SystemThemes\


2

正如这篇博客文章所说,使用以下代码(仅调用一次),并阅读输出文件(defaultTemplate.xml):

public static void SaveDefaultTemplate()
{
    var control = Application.Current.FindResource(typeof(ButtonSpinner));
    using (XmlWriter writer = XmlWriter.Create(@"defaultTemplate.xml"))
    {
        XamlWriter.Save(control, writer);
    }
}

在我看来,这是最好的方法。 一些元素,如DataGridCell,无法通过Visual Studio中的调整提取:属性>模板>转换为新资源...,因为您不能明确定义任何DataGridCell。

1

1
此留言发表时能够确认它的工作正常。感谢您的发帖。 - BrainSlugs83

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接