我想知道如何使用Visual Studio提取(获取副本)给定控件的默认模板。我知道这可以通过Expression Blend(右键单击控件,“编辑模板”->“编辑副本...”)来完成,然后将默认控件模板复制到Xaml中。但这完全可以使用Visual Studio吗?

#1 楼


2015年更新,其中有明确的说明


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


在WPF设计器中,选择相关控件,或将鼠标光标放在XAML中的相关控件上。
按F4键打开“属性”窗口。
打开“杂项”类别以找到“模板”属性,或在“窗口”顶部的搜索字段中键入“模板”。在“模板”字段的右侧,然后选择“转换为新资源...”选项:




在弹出对话框中,将新的ControlTemplate命名为添加并决定要在何处定义它:




单击“确定”按钮。


评论


谢谢!当我需要获取DatePickerTextBox的控件模板时,这确实帮了我大忙,这样我就可以删除烦人的内部边框。

–马特·贝克尔
2015年5月8日14:44

这真的很棒-谢谢!您是否知道是否可以类似地提取完整样式?在样式属性上禁用了“转换为新资源”命令。

–安德鲁·汉隆(Andrew Hanlon)
15年11月24日在14:03

@AndrewHanlon,您当时正在运行解决方案吗?我认为这是导致“转换为新资源”按钮被禁用的唯一原因。

–谢里登
15年11月24日在14:43

该控件消失了,因为VS插入了一个空模板:


16-4-11的21:00

这些说明也适用于VS2017。

–itsho
17年9月12日在14:44

#2 楼

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

在属性窗口中查找“模板属性”,然后右键单击它,
选择“将值提取到资源”

这将在XAML中创建模板的副本,供您使用。

评论


当我在文本框上执行此操作时,Template属性被禁用,因此无法右键单击它。

–杰夫·科图拉
2014年4月3日14:09

@Jeff:在设计器窗口(不在Xaml代码中)上右键单击您的元素,然后单击“编辑模板...”和“编辑副本...”

– Pollitzer
15年11月15日在11:18

#3 楼

只是为了更新此问题,在VS 11中,XAML设计器允许您像Expression Blend一样执行此操作。

评论


VS 2012版本仍然如此。

– codekaizen
2012年12月4日,下午2:26

#4 楼

要记住的一件事:如果您已经在某个位置定义了一种样式,该样式以给定控件为目标,则上述所有选项都将被禁用。我的App.xaml文件中包含以下代码:

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


我想弄清楚为什么edit a copy...convert to new resource...选项说明了为什么我的Button(在完全不同的文件中定义)的其他答案被禁用。我注释掉了上面Button的样式代码,然后突然两个选项都不再被禁用。

故事的寓意:如果代码中任何位置的元素已经存在样式,则VS不会为您生成包含模板副本的样式。

#5 楼

据我所知这是不可能的。但是,您可以使用“向我显示模板”查看给定控件的默认模板。

评论


我曾经使用“向我显示模板”,但发现模板有时会缺少某些功能,因此改用了MSDN上的模板

–雷切尔(Rachel)
2012年1月11日在21:20

链接现在已断开

–德雷克
18-10-24在9:26



#6 楼

在VS19中,我无法通过属性来执行此操作。
但是,我能够在设计模式Edit TemplateEdit a Copy上右键单击控件。