如何在Visual Studio中提取默认控件模板?

72

我想知道如何使用Visual Studio提取给定控件的默认模板(获取副本)。我知道可以使用Expression Blend完成此操作(右键单击控件,“编辑模板” ->“创建副本...”),然后将默认控件模板复制到我的Xaml中。但是在Visual Studio中是否也可以完成这个操作呢?

6个回答

109

2015 年更新,带有明确的说明

在 Visual Studio 2013 中,您可以通过几个简单的步骤获取控件的默认ControlTemplate

  1. 在 WPF 设计器中选择相关控件,或者将鼠标光标放在 XAML 中的相关控件上。

  2. F4打开 属性窗口。

  3. 打开 杂项 类别以找到 模板 属性,或者在窗口顶部的搜索字段中键入 Template

  4. 单击在 Template 字段右侧的小方块,并选择转换为新资源...选项:

enter image description here

  1. 在弹出的对话框中,命名要添加的新 ControlTemplate 并决定您希望它在哪里定义:

enter image description here

  1. 点击 确定 按钮。

编辑 >>>

在 Visual Studio 2019 及更高版本中,由于某些原因,此选项似乎已被禁用。您可以通过右键单击设计视图中的控件并选择“编辑模板”,然后选择“编辑副本...”来找到解决方法。


谢谢!当我需要获取DatePickerTextBox的控件模板以便去除烦人的内部边框时,这确实帮了我很大的忙。 - Matt Becker
这真的很棒 - 谢谢!你知道是否有一种类似提取完整样式的方法吗?“转换为新资源”命令在样式属性上被禁用了。 - Andrew Hanlon
@AndrewHanlon,在那个时候你是否在运行解决方案?这是我能想到的唯一原因,会导致“转换为新资源”按钮被禁用。 - Sheridan
控件消失了,因为VS插入了一个空模板:<ControlTemplate x:Key="templatePasswordBox" TargetType="PasswordBox"/> - Soonts
1
这些指令同样适用于VS2017。 - itsho
这在VS2022中仍然有效,尽管小方块现在变成了一个带有下拉箭头的圆柱体。 - fadden

35

从Visual Studio中 - 右键单击控件,选择属性。

在属性窗口中查找模板属性并右键单击它,选择提取值到资源。

这将为您创建模板的XAML副本以供操作。


1
当我在文本框上执行此操作时,模板属性被禁用,因此我无法右键单击它。 - Jeff Kotula
3
@Jeff:在设计器窗口中右键单击您的元素(不是在Xaml代码中),然后选择“编辑模板...”和“编辑副本...”。 - Pollitzer

9
只是为了更新这个问题,在VS 11中,XAML设计师允许您像Expression Blend一样做到这一点。

1
这在发布的VS 2012中仍然是正确的。 - codekaizen

5

需要注意的一点是:如果您已经在其他地方定义了针对特定控件的样式,则上述所有选项都将被禁用。我在我的App.xaml文件中有以下代码:

<Application.Resources>
    <Style TargetType="Button">
        <Setter Property="IsTabStop" Value="False"/>
    </Style>
</Application.Resources>

我曾经为了弄清楚为什么其他答案中描述的“编辑副本…”和“转换为新资源…”选项对于我在完全不同文件中定义的按钮是禁用的而苦恼不已。我注释掉了Button的上述样式代码,突然两个选项都没有被禁用了。
故事的寓意是:如果您的代码中已经存在一个元素的样式,无论该元素在何处,VS都不会为您生成包含模板副本的样式。

2
在VS19中,我不能通过属性来实现这一点。然而,在设计模式下,我可以右键单击控件,选择“编辑模板”和“编辑副本”。

1
据我所知,这是不可能的。但是,您可以使用Show Me The Template来查看给定控件的默认模板。

9
我曾经使用过“Show Me The Template”,但发现有些模板偶尔会缺少一些功能,因此我已经转而使用在MSDN上找到的模板。 - Rachel
链接现在已经失效。 - Drake

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