2010-11-26 5 views
7

Eh bien j'ai mon dossier Styles.xaml des thats fusionnée dans la Application.xaml il applique à tout ..WPF Modifier la taille de la police du bouton avec le style échoue?

ici sont mes styles

<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> 

Quand im dans l'éditeur cela semble fonctionner, mais Quand je lance l'application, la taille de police des boutons est réduite à leurs tailles normales.

Je suppose que les boutons créent un TextBlock lorsque leur contenu est défini sur une chaîne, puis utilisent le style textblock .. mais comment puis-je remplacer cela?

Répondre

0

J'ai essayé vos styles, et cela fonctionne bien. Donc, vos styles ne sont pas le problème. Je pense que c'est l'endroit où vous avez fusionné le style que vous avez écrit. Vous feriez mieux de mettre votre ResourceDictionary Styles.xaml dans votre fichier MainWindow au lieu de votre Application.xaml.

<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> 

Mais votre problème ne sait pas, si ce n'est pas la solution pourriez-vous préciser un peu plus la façon dont vous utilisez vos styles en affichant cette partie de votre code?

8

Vous avez raison

Je pense que les boutons créent une TextBlock lorsque leur contenu est défini sur une chaîne, puis utilisez le textblock le style

. Voir this post.

Une solution consiste à définir un DataTemplate pour System.String, où nous pouvons utiliser explicitement une valeur par défaut TextBlock pour afficher le contenu. Vous pouvez placer que DataTemplate dans le même dictionnaire que vous définissez le style TextBlock pour que cette DataTemplate sera appliqué à quelle que soit ContentPresenter effectuée par votre style.

Ainsi, en ajoutant le DataTemplate à la fin de Styles.xaml va résoudre le problème

<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> 

Cela gardera votre style pour un TextBlock mais le TextBlock créé dans un bouton par exemple ne sera pas effectué par elle

+1

J'aimerais pouvoir voter plus souvent. J'ai passé des heures avec un autre développeur à essayer de comprendre cela. Merci! – Morinar

+0

Y a-t-il des "pièges" avec cette solution de contournement? Par exemple, si vous voulez que les styles s'appliquent uniquement à TextBlocks sur Butttons et pas à tous les autres TextBlocks? – matrixugly

Questions connexes