【问题标题】:ControlTemplate for existing controls in WPFWPF 中现有控件的 ControlTemplate
【发布时间】:2010-12-06 06:23:59
【问题描述】:

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

【问题讨论】:

    标签: .net wpf controltemplate


    【解决方案1】:

    查看StyleSnooper:

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

    【讨论】:

    【解决方案2】:

    样式和模板示例已在on MSDN 上供下载,请参阅Default WPF Themes link

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

    【讨论】:

    • 啊,伙计!你的链接在 Davey Jones 储物柜中沉没!
    【解决方案3】:

    如果你有Expression Blend,你可以:

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

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

    【讨论】:

    • 我认为这个答案应该得到更多的关注,这可能是最好的方法。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      2020 年更新:

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

      第二种和更短的解决方案可能是使用 Microsoft Blend 到 extract 模板,步骤如下:

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

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

      【讨论】:

        【解决方案6】:

        你可以使用ShowMeTheTemplate这样的工具

        【讨论】:

        • 是否有获取 XAML 格式的代码?(如以树格式查看可视化树)
        • 是的,既然这个工具是这样做的......你可以看一下代码,它在zip文件中提供
        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

          XamlWriter 类为您提供此功能。如果controlName 是控件的名称 然后使用下面的 sn-p,您可以在 stringBuilder 对象中获得控件模板的 Xaml。 我猜答案中提到的工具使用了这个类。

          var stringBuilder = new StringBuilder();
          var xmlSettings = new XmlWriterSettings
          {
            Indent = true
          };
          
          using (var xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings))
          {
            XamlWriter.Save(controlName.Template, xmlWriter);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-23
            • 1970-01-01
            • 2011-10-26
            • 1970-01-01
            • 2010-09-14
            相关资源
            最近更新 更多