我可以创建参数化控件模板,即创建可能包含不同控件的控件模板。例如,我可以使用带有标签或按钮的控制模板 - 无论我想要什么位置。
<ControlTemplate x:Key="MessageCTemplate">
<Grid …>
<Rectangle …/>
<Rectangle …/>
<Rectangle …/>
…
<!--I want to have here button, label or whatever I want-->
<label x:Name=”MsgLabel”>
<Grid/>
<Style x:Key="MsgStyle" TargetType="{x:Type Button}">
<Setter Property="Opacity" Value="0.6" />
<Setter Property="Template" Value="{StaticResource MessageCTemplate}" />
<Style/>
我不喜欢编写相同的控件模板,它们的代码中只有一个不同的字符串。或者,也许,我误解了smth和另一种避免复制过去的方法。
答案 0 :(得分:5)
您所描述的是ContentControl。这是许多常用控件的基类,包括Button,Label,ListBoxItem ......
ContentControl的想法是它可以定义自己的布局和一些UI元素,并且还包括一个占位符,其中设置了任何内容,因为可以注入其Content属性。还有一个HeaderedContentControl,允许2个占位符用于其他内容。
<ControlTemplate x:Key="MessageCTemplate" TargetType="{x:Type ContentControl}">
<Grid …>
<Rectangle …/>
<Rectangle …/>
<Rectangle …/>
<ContentPresenter/> <!-- This is where the content shows up -->
<Grid/>
</ControlTemplate>
<Button Template="{StaticResource MessageCTemplate}">
<Label Content="My label"/>
</Button>
<Button Template="{StaticResource MessageCTemplate}">
<Ellipse Fill="Orange" Width="100" Height="30"/>
</Button>