Я протестировал ваш пример кода, и проблема заключается в следующем:
ContentControls
, например, Button, установите их содержимое как DataContext
для DataTemplate
.Поэтому, когда вы привязываетесь к DataContext
, вы фактически привязываетесь к содержимому вашей кнопки.
Вы можете решить ее двумя способами:
{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=DataContext.Content.ContentName}
Или установить значение как содержимое вВаш триггер:
<Setter Property="Content" Value="{Binding Content.ContentName}"></Setter>
Это последнее решение также будет проще с Hidden Http, поэтому вы можете выбросить эти шаблоны:
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding Revealed}" Value="True">
<Setter Property="Content" Value="{Binding Content.ContentName}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Revealed}" Value="False">
<Setter Property="Content" Value="Hidden"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
Дополнительный бонус: ультра короткийрешение:
<Style TargetType="{x:Type Button}">
<Setter Property="Content" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding Revealed}" Value="True">
<Setter Property="Content" Value="{Binding Content.ContentName}" />
</DataTrigger>
</Style.Triggers>
</Style>