必要に応じて、コントロール テンプレート内に2 つのオブジェクトを定義ContentPresenter
し、両方を同じコンテンツ ソースに向けることができます。
<ControlTemplate x:Key="WeirdButton" TargetType="Button">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.RowSpan="2" Background="{TemplateBinding Background}" />
<ContentPresenter ContentSource="Content"/>
<ContentPresenter ContentSource="Content" Grid.Row="1"/>
</Grid>
</ControlTemplate>
ただし、これにはかなり珍しい副作用があります。同じビジュアルをビジュアル ツリーの 2 つの場所に配置することはできないため、このテンプレートは、ボタンの子コンテンツがビジュアルではない (またはビジュアルから派生した) 場合にのみ期待どおりに機能します。コンテンツが他のタイプのデータで、ビジュアルがデータ テンプレートによって生成されている場合、すべてが期待どおりに機能します。ボタンの内容を文字列 ( <Button Content="OK"/>
) に設定することもできます。
これと同じ効果がビジュアル ブラシで実現できることに注意してください。
<ControlTemplate x:Key="WeirdButton" TargetType="Button">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.RowSpan="2" Background="{TemplateBinding Background}" />
<ContentPresenter x:Name="presenter" ContentSource="Content"/>
<Rectangle Grid.Row="1"
Width="{Binding ActualWidth, ElementName=presenter}" Height="{Binding ActualHeight, ElementName=presenter}">
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=presenter}" Stretch="None" AlignmentX="Left"/>
</Rectangle.Fill>
</Rectangle>
</Grid>
</ControlTemplate>
このアプローチの欠点は、ビジュアル ブラシでコントロールを操作できないことです。したがって、複製のボタン、テキストボックス、およびその他のコントロールもインタラクティブにしたい場合は、最初のテンプレートに近いアプローチに従う必要があります。