2010-11-26 13 views
7

Nun, ich meine Datei Styles.xaml das ist haben in der Application.xaml verschmolzen, so dass es zu jeder Sache gilt ..WPF Schriftart ändern Größe der Schaltfläche mit Stil fehlschlägt?

hier meine Stile sind

<Style TargetType="{x:Type Control}" x:Key="baseStyle"> 
    <Setter Property="FontFamily" Value="Verdana"/> 
    <Setter Property="FontSize" Value="12"/> 
</Style> 

<Style TargetType="Button" BasedOn="{StaticResource baseStyle}"> 
    <Setter Property="Margin" Value="2,0,2,0"/> 
    <Setter Property="Padding" Value="2"/> 
    <Setter Property="FontSize" Value="50"/> 
</Style> 

<Style TargetType="TextBlock"> 
    <Setter Property="FontFamily" Value="Verdana"/> 
    <Setter Property="FontSize" Value="12"/> 
</Style> 

Wenn im im Editor zu arbeiten scheint dies aber Wenn ich die Anwendung ausführen, wird die Schriftgröße der Schaltflächen auf ihre normalen Größen geschrumpft.

Meine Vermutung ist, dass die Schaltflächen einen TextBlock erstellen, wenn ihr Inhalt auf eine Zeichenfolge festgelegt ist und dann den Textblockstil verwenden Wie kann ich das übersteuern?

Antwort

0

Ich habe versucht, Ihre Stile, und es funktioniert gut. Deine Stile sind also nicht das Problem. Ich denke, es ist der Ort, an dem du den Stil verschmolzen hast, als du geschrieben hast. Sie sollten Ihre ResourceDictionary Styles.xaml lieber in Ihre MainWindow-Datei als in Ihre Application.xaml einfügen.

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Styles.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 

    <StackPanel> 
     <TextBlock>TTT</TextBlock> 
     <Button>BBB</Button> 
    </StackPanel> 
</Window> 

Aber das Problem bleibt unklar, wenn es nicht die Lösung ist könnte man ein bisschen mehr so, wie Sie durch die Veröffentlichung dieses Teil Ihres Codes verwenden Ihre Stile klären?

8

Du hast Recht über

Meine Vermutung ist, dass die Tasten eine TextBlock- erstellen, wenn ihre Inhalte einen String gesetzt und dann den Textblock Stil

verwenden. Siehe this Post.

Eine Abhilfe ist ein Datatemplate für System.String zu definieren, wo wir explizit eine Standard TextBlock- verwenden können um den Inhalt anzuzeigen. Sie können diese Datatemplate platzieren im gleichen Wörterbuch Sie die TextBlock- Stil definieren, so dass diese Datatemplate wird was Content erfolgt durch Stil angewendet werden.

So Hinzufügen der Datatemplate am Ende Styles.xaml wird das Problem

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <Style TargetType="{x:Type Control}" x:Key="baseStyle"> 
     <Setter Property="FontFamily" Value="Verdana"/> 
     <Setter Property="FontSize" Value="12"/> 
    </Style> 

    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}"> 
     <Setter Property="Margin" Value="2,0,2,0"/> 
     <Setter Property="Padding" Value="2"/> 
     <Setter Property="Foreground" Value="Red" /> 
     <Setter Property="FontSize" Value="50"/> 
    </Style> 

    <Style TargetType="{x:Type TextBlock}"> 
     <Setter Property="FontFamily" Value="Verdana"/> 
     <Setter Property="Foreground" Value="Green" /> 
     <Setter Property="FontSize" Value="24"/> 
    </Style> 

    <DataTemplate DataType="{x:Type sys:String}"> 
     <TextBlock Text="{Binding}"> 
      <TextBlock.Resources> 
       <Style TargetType="{x:Type TextBlock}"/> 
      </TextBlock.Resources> 
     </TextBlock> 
    </DataTemplate> 
</ResourceDictionary> 

dieses Problem beheben wird Ihren Stil für einen Textblock halten, aber der Textblock in einem Knopf zum Beispiel erstellt wird nicht durchgeführt werden von ihm

+1

Ich wünschte, ich könnte dies öfter abstimmen. Ich verbrachte Stunden mit einem anderen Entwickler, der versuchte, das herauszufinden. Vielen Dank! – Morinar

+0

Gibt es irgendwelche "gotchas" mit dieser Problemumgehung? Wenn Sie möchten, dass Stile nur auf TextBlocks auf Butttons angewendet werden und nicht auf alle anderen TextBlocks? – matrixugly

Verwandte Themen