Wpf 如何重用控件模板?

Wpf 如何重用控件模板?,wpf,Wpf,我可以创建参数化控件模板,即创建可能包含不同控件的控件模板。例如,我可以使用带有标签或按钮的控件模板-在某个位置上我想要的任何东西 <ControlTemplate x:Key="MessageCTemplate"> <Grid …> <Rectangle …/> <Rectangle …/> <Rectangle …/> … <!--I want to have here button, label or w

我可以创建参数化控件模板,即创建可能包含不同控件的控件模板。例如,我可以使用带有标签或按钮的控件模板-在某个位置上我想要的任何东西

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

您所描述的是ContentControl。这是许多常用控件的基类,包括按钮、标签、ListBoxItem

ContentControl的思想是,它可以定义自己的布局和一些UI元素,还可以包含一个占位符,在其中可以插入任何设置为其内容属性的内容。还有一个HeaderedContentControl,允许为其他内容设置两个占位符

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