Mein Problem tritt mit WPF in .NET 3.5 SP1 und kann wie folgt beschrieben werden:Standard TextBlock- Stil überwiegende Schaltfläche Textfarbe
Ich habe einen Style
Standard trifft alle TextBlock
Elemente in meinem UI. Das ist, wie es aussieht:
<Style TargetType="{x:Type TextBlock}">
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="Foreground" Value="Red"/>
</Style>
, die für alle TextBlock
s gut funktioniert. Zusätzlich zu, dass ich eine Button
Stil mit einem ControlTemplate
, die wie dieser (verkürzt) aussieht:
<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>
Beachten Sie die Linie TextBlock.Foreground="{TemplateBinding Foreground}"
im ContentPresenter
. Dies sollte den Schaltflächentext auf grün setzen und tatsächlich in der Designer-Ansicht von Visual Studio. Aber wenn ich das Programm kompiliere und laufe, ist der Knopftext rot, die Textfarbe wird durch den Standard-Stil TextBlock
eingestellt. Das habe ich mit Snoop verifiziert.
Wie kann ich verhindern, dass der Standard TextBlock
den Wert TextBlock.Foreground
überschreibt? Die OverridesDefaultStyle
Eigenschaft von ContentPresenter
hilft in diesem Fall nicht.
Irgendeine Idee?
Dank für Ihre Antwort danken. Es gibt zwei Dinge, die ich nicht verstehe: 1. Auch wenn der TextBlock, der vom ContentPresenter erstellt wurde, nicht im VisualTree ist, sollte er trotzdem die Werte akzeptieren, die ich in TextBlock.Foreground eingegeben habe, richtig? 2. Mit dem von Ihnen beschriebenen DataTemplate bin ich für alle Texte in ContentPresenter-Elementen auf nur einen Stil beschränkt, richtig? –
@HA: Wie ich es verstehe, wird es nur sicherstellen, dass der andere TextBlock Stil nicht aufgestockt ist.Aber ich könnte mich irren, ich habe es vorher benutzt und ich hatte keine Probleme damit –
@HA: Auch das wird nur verwendet, wenn ein TextBlock aufgrund des Inhalts eines ContentControl erstellt wird. Sie können immer noch die Dinge tun, die Sie in Ihrem Beispiel tun, wie zum Beispiel den Vordergrund setzen. Oder missverstehe ich die Frage? –