如何重用控件模板?

时间:2010-10-18 10:23:48

标签: wpf

我可以创建参数化控件模板,即创建可能包含不同控件的控件模板。例如,我可以使用带有标签或按钮的控制模板 - 无论我想要什么位置。

<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和另一种避免复制过去的方法。

1 个答案:

答案 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>