Моя проблема возникает с WPF в .NET 3.5 SP1 и может быть описана следующим образом:
У меня есть значение по умолчанию Style
, поражающее все элементы TextBlock
в моем пользовательском интерфейсе. Вот как это выглядит:
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="Foreground" Value="Red"/>
</Style>
Это прекрасно работает для всех TextBlock
с. В дополнение к этому у меня есть стиль Button
, включая ControlTemplate
, который выглядит следующим образом (сокращенно):
<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}" BasedOn="{x:Null}">
<Setter Property="Foreground" Value="Green"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Border"
Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"
Height="24"
BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
TextBlock.Foreground="{TemplateBinding Foreground}"/>
</Border>
<ControlTemplate.Triggers>...</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Обратите внимание на строку TextBlock.Foreground="{TemplateBinding Foreground}"
в ContentPresenter
. Это должно установить текст кнопки зеленым, и фактически это происходит в представлении конструктора Visual Studio. Но когда я компилирую и запускаю программу, текст кнопки красный, цвет текста устанавливается по умолчанию в стиле TextBlock
. Я проверял это с помощью Snoop.
Как предотвратить стиль TextBlock
по умолчанию для переопределения значения TextBlock.Foreground
? Свойство OverridesDefaultStyle
ContentPresenter
в этом случае не помогает.
Есть идеи?