在WPF(VS2013)中,我正在创建一个如此按钮:
<Button>
<Label>1</Label>
</Button>
这些按钮中的每一个都会有更多,例如增加Label的字体大小,网格行/列分配,我可能会使用标签的绑定,以便我可以更改数字。我正在创建一个计算器应用程序,所以我需要重复使用此按钮10次(每个数字0-9一个)。
我没有将这个按钮XML复制/粘贴10次,而是想看看它是否可以模板化。我已经阅读了一些关于ControlTemplate和DataTemplate的内容,但我不确定这些中的任何一个是否正确使用。我不清楚什么应该是一种风格或什么应该是一个模板。
因此,如果有人可以帮助我理解如何“模板化”按钮及其样式(例如宽度,高度,字体大小等),以便它们可以轻松地重复使用,那将有助于减轻重量。指导表示赞赏!
答案 0 :(得分:2)
如果要覆盖控件的整个模板,请使用ControlTemplate
,如果要告诉WPF如何绘制数据对象(通常是DataTemplate
),请使用DataContext
,如果要告诉WPF如何绘制对象的ContentTemplate
属性,请使用Content
。
创建一个全新的ControlTemplate
非常复杂。要进行演示,请查看this MSDN example,了解ControlTemplate
的{{1}}示例。
在您的情况下,我建议为您的按钮创建一个Button
,其中包含Style
,Height
,Width
等公共属性的设置器。如果您需要在不完全覆盖按钮模板的情况下以自定义方式绘制按钮的Font
属性,包括Content
样式设置器,告诉WPF如何绘制ContentTemplate
属性。
Button.Content
和
<Button Style="{StaticResource CalculatorButton}" Content="1" />
<Style x:Key="CalculatorButton" TargetType="{x:Type Button}">
<Setter Property="Height" Value="50"/>
<Setter Property="Width" Value="50"/>
<Setter Property="FontSize" Value="14" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding }" FontFamily="Wingdings 3" FontWeight="Bold" FontSize="18" Foreground="Navy" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
定义了按钮的外观,ControlTemplate
定义了ContentTemplate
的外观,而Button.Content
使用的DataTemplate
定义了将绘制数据对象“1”。
答案 1 :(得分:0)
您需要创建一个新的按钮样式。学习曲线不是太陡峭,但好处是巨大的。您可以在此处开始学习:http://msdn.microsoft.com/en-us/library/ms745683(v=vs.110).aspx
长话短说:使用Blend打开项目,右键单击按钮,“编辑样式”,“编辑副本”。如果您选择在Application中定义它,您可以在其他页面中重复使用它(它将在您的App.xaml文件中)
获得基本样式后,根据需要进行编辑。
答案 2 :(得分:0)
您可以从按钮样式的副本开始。使用Blend(VS的一部分)来创建:打开对象树内按钮的上下文菜单,然后选择“编辑模板”(或类似的,手头没有英文版),然后选择“模板复制” (或类似的)。
现在您可以更改属性(在设计器或XAML中)。具有这种风格的每个按钮都需要引用这个新的资源。