2010-02-05 12 views
7

Wenn Sie den Standardstil für einen TextBlock festlegen, wird auch der Stil im Label und anderen Steuerelementen festgelegt. Dies passiert nur, wenn Sie die Stile in die Anwendungsressourcen einfügen, wenn ich den Stil in die Fenster-Ressourcen platziere, ist alles in Ordnung.WPF Festlegen des Standardstils für einen TextBlock überschreibt den Stil für ein Label

Ich habe auch festgestellt, dass der VS 2008 Designer und XamlPadX das Label anzeigen, wie Sie erwarten würden, aber das Problem tritt nur auf, wenn Sie die Anwendung im wirklichen Leben ausführen.

<Application x:Class="WpfApplication.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="Window1.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <Style TargetType="TextBlock"> 
       <Setter Property="FontSize" Value="8"/> 
      </Style> 

      <Style x:Key="Title" TargetType="Label"> 
       <Setter Property="FontSize" Value="32"/> 
      </Style> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

<Window x:Class="WpfApplication.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="300" 
     Title="Window1" 
     Width="300"> 
    <StackPanel> 

     <TextBlock Text="TextBlock No Style" Style="{x:Null}"/> 
     <Label Content="Label No Style" Style="{x:Null}"/> 

     <TextBlock Text="Default TextBlock"/> 
     <Label Content="Default Label" Style="{StaticResource Title}"/> 

    </StackPanel> 
</Window> 

Der obige Code zeigt:

TextBlock No Style - Default font size (As you would expect) 
Label No Style - Size 5 font size (How did this happen?) 
Default TextBlock - Size 5 font size (As expected by my style) 
Default Label - Size 5 font size (How did this happen?) 

Antwort

10

Ja, das ist zu erwarten; Schau dir die Standardvorlage für Label an, es ist nur ein eingerückter TextBlock. Styles sind geerbt, so dass das Label die FontSize auf 32 setzen wird, aber dann wird der Stil des TextBlock überschreiben. Wenn du es nur getan hättest, wäre es auch 5pt.

Bearbeiten: Also die Art, wie ich das lösen würde, ist eine Dummy-Unterklasse (d. H. Eine Klasse, die nichts ändert) von TextBlock namens NormalText, dann style that; Auf diese Weise werden Sie nicht versehentlich andere TextBlocks aufnehmen.