2016-10-12 1 views
0

Ich habe folgende CheckboxStandard TextBlock- Styling

<CheckBox x:Name="checkBox" Content="CheckBox" Width="74"/>

und ich habe eine Schaltfläche

<Button Name="TestButton" Content="Test" />

ich eine "default" Farbe für den Textblock festlegen möchten. Ich erreichen, dass durch eine Resource, die den folgenden Inhalt hat:

<Style TargetType="{x:Type TextBlock}"> 
    <Setter Property="Foreground" Value="White"/> 
</Style> 

Das Problem ist, dass der Knopf noch einen schwarzen Textblock Vordergrund haben sollte, aber obwohl in einem anderen sourcedictionary i folgende Voraussetzungen erfüllt sein, es ändert sich nach wie vor auf weiß :

<Style TargetType="Button"> 
    <Style.Setters> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border BorderThickness="1,0,0,1" CornerRadius="5" Background="{TemplateBinding Background}"> 
         <ContentPresenter 
           x:Name="ContentPresenter" 
           Margin="1" 
           VerticalAlignment="Center" 
           HorizontalAlignment="Center" 
           TextBlock.Foreground="Black" 
           Opacity="1.0"/> 
        </Border> 
       </ControlTemplate/> 
      <Setter.Value/> 
     </Setter> 
    </Style.Setters> 
</Style 

Edit: in Application.xaml wie diese Die ResourceDictionaries definiert sind:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="TextBlock.xaml"/> 
      <ResourceDictionary Source="Buttons.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
+0

Haben Sie im ContentPresenter 'TextElement.Foreground =" Black "anstelle von' TextBlock.Foreground' versucht? –

+0

Yeah, 'TextElement.Foreground' und' TextBlock.Foreground' ändern beide die Textfarbe, werden aber leider immer noch vom Other Style überschrieben. – Splinti

+0

Wie definiert man einen anderen Standard-TextBlock-Stil in 'ContentPresenter.Resources'? –

Antwort

1

Sie könnten versuchen, den Standard TextBlock Stil lokal für die ContentPresenter durch die Definition ein anderes in seiner Resources überschrieben:

<ContentPresenter ... > 
    <ContentPresenter.Resources> 
     <Style TargetType="TextBlock"> 
      <Setter Property="Foreground" Value="Black" /> 
     </Style> 
    </ContentPresenter.Resources> 
</ContentPresenter> 

Aber eine bessere Art und Weise eine Standard-Steuertextfarbe eingestellt ist, wie dies in App.Resources. TextElement.Foreground überschreibt dies bei jedem gegebenen individuellen Element.

<SolidColorBrush 
    x:Key="{x:Static SystemColors.ControlTextBrushKey}" 
    Color="White" 
    /> 

Wenn Sie diese verwenden und Ihre Standard-TextBlock Stil verwerfen, Ihre ursprüngliche ContentPresenter funktionieren sollte, wie Sie es hatte.