Вы можете определить два 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>
Однако, это имеет довольно необычные побочные эффекты. Поскольку вы не можете поместить один и тот же визуал в два места в дереве визуалов, этот шаблон будет работать только так, как ожидается, если дочерний контент кнопки НЕ является визуалом (или производным от Visual). Если содержимое - это какой-то другой тип данных, а визуальные элементы создаются шаблоном данных, все работает должным образом. Установка содержимого кнопки в строку (<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>
Недостаток этого подхода заключается в том, что вы не можете взаимодействовать с элементами управления в визуальной кисти. Поэтому, если вы хотите, чтобы кнопки, текстовые поля и другие элементы управления на дубликате также были интерактивными, вам следует придерживаться подхода, более близкого к первому шаблону.