Comment faire la couleur par défaut, la police de caractères de la famille et de la taille de la police pour un TextBlock et de l'Étiquette, se mettre dans une application WPF?
Edit: je suppose que la question n'était pas indiqué très clairement. Il en fait compose de 4 distinctes:
- Comment un
TextBlock
obtenir sa couleur par défaut, si le client l'application ne fournit pas de style, par programme ou par le biais de xaml? - Comment un
Label
obtenir sa couleur par défaut? - Comment un
TextBlock
obtenir par défaut de la taille de la police et de la police de la famille, si le client l'application ne fournit pas de style, par programme ou par le biais de xaml? - Comment un
Label
obtenir par défaut de la taille de la police et de la police de la famille?
BTW, les questions ne sont pas sur la façon de changement ou de définir des styles pour la couleur/taille de la police/police de caractères de la famille d'un TextBlock
ou un Label
, même s'ils sont en quelque sorte liés. Je pense que je connaissais déjà la réponse pour le #2, qui est un Label
obtient sa couleur de SystemColors.ControlTextBrushKey et en substituant ConrolTextBrushKey
comme suit:
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Red"/>
Vous seriez en mesure de "globalement" changer de couleur pour Label
s. Après quelques recherches, je crois que j'ai aussi trouver la réponse à #1: Un TextBlock
hérite de la sa couleur de premier plan de son contenant Window
, qui, par défaut, obtient son Foreground
couleur de SystemColors.WindowTextBrushKey. En définissant une couleur pour le WindowTextBrush comme suit:
<Window.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.WindowTextBrushKey}"
Color="Yellow"/>
</Window.Resources>
Vous seriez en mesure de changer le "premier plan", couleur pour la TextBlock
s à l'intérieur de la Window
.
Question #3 et #4 restent des énigmes pour moi, mais je suis en supposant qu'ils ont à faire avec la SystemFonts.
Espérons que cela a du sens. J'ai vraiment envie de connaître les réponses qu'ils ont été me tracasse depuis un moment. Merci beaucoup!
Ci-dessous est le message original:
Si vous regardez dans le style d'un Label
dans le thème (par exemple "aero.normalcolor.xaml") qui est livré avec Windows, vous pouvez trouver
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
Qui définit la couleur d'un Label
. Mais il n'est pas le cas à l' FontSize
propriété est spécifiée dans le style, ce qui je suppose a quelque chose à voir avec la SystemFonts. Pour un TextBlock
, il a l'air encore plus mystérieux que le style dans "aero.normalcolor.xaml" n'a que 4 lignes:
<Style x:Key="{x:Type TextBlock}"
TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping"
Value="NoWrap"/>
<Setter Property="TextTrimming"
Value="None"/>
</Style>
Où un Label
ou un TextBlock
obtenir les valeurs de sa couleur et de taille de police/de la famille, si l'application ne permet pas de définir tout, et où sont ces crochets en WPF?
Edit:
C'est un essai sur route en essayant de définir les TextBlock
de la couleur par SystemColors.ControlTextBrush
(en supposant que c'est là un TextBlock
obtient sa couleur par défaut à partir, ce qui semble être faux):
<Window x:Class="TestFontColor.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<StackPanel.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Red"/>
</StackPanel.Resources>
<Button Content="This is red."/>
<Label Content="This is blue.">
<Label.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Blue"/>
</Label.Resources>
</Label>
<TextBlock Text="TextBlock: This is still black."/>
</StackPanel>
OriginalL'auteur mobileTofu | 2011-12-12
Vous devez vous connecter pour publier un commentaire.
Aussi loin que je me souvienne, dans la plupart des cas des classes comme
TextBlock
,TextBox
et bien d'autres prennent la couleur du texte de laTextElement.Foreground
de la propriété. La valeur de la propriété est héritée tout au long de l'arborescence visuelle, c'est à dire que vous pouvez le configurer sur l'élément racine et ont la plupart du texte, modifier sa couleur. Par exemple:En fait, la même chose est vrai même pour les étiquettes: le setter dans leur style par défaut définit simplement la
TextElement.Foreground
à l'une des couleurs du système.Cependant, cela est vrai uniquement pour l'état par défaut des contrôles. Les états altérés, comme la mise en évidence, ne sont pas héréditaires, mais plutôt pris à partir du système de couleurs, comme Rachel a écrit.
Mise à JOUR
La même chose est vraie pour
FontSize
etFontFamily
. Ils sont des propriétés de laTextElement
classe qui sont attachés à la propriété d'usage. Ils héritent de leurs valeurs. Une fois que vous définissez une valeur sur un visuel élément de l'arbre, tous ses enfants de la même valeur. À moins qu'ils le remplacer soit par un explicite affectation de propriété, ou par le style et ainsi de suite.Une fois de plus, la couleur du texte police taille de police et la famille sont régies par la valeur de
TextElement.Foreground
,TextElement.FontSize
etTextElement.FontFamily
attachées des propriétés de dépendance sur un élément visuel.Certains contrôles, comme
Label
définir explicitement leurForeground
à certains pinceau. Il arrive donc que le pinceau est l'un desSystemColors
. Mais il n'a pas à être vrai pour tous les contrôles. D'autres (TextBlock
,TextBox
, etc.) ne pas remplacer la valeur de la propriété et de l'utilisation de quelques paramètres par défaut évalués au démarrage. La même chose arrive àFontSize
etFontFamily
. Vous n'avez pas besoin de les mettre dans l'ordre pour eux de travailler. C'est comment WPF œuvres.Soi-disant, les valeurs dépendent de la thème du système. Je crois qu'ils sont évaluées au cours de l'application de démarrage. Peut-être qu'ils sont configurables.
Mise à JOUR 2
Des réponses à vos questions:
Il le prend de la valeur héritée de la
TextElement.Foreground
attaché propriété de dépendance. Par défaut elle est héritée de la racine de l'élément visuel, qui à son tour est tout simplement la valeur par défaut de la propriété de dépendance (Brushes.Black
). Voir aussiIl le prend de la valeur de la
TextElement.Foreground
attaché propriété de dépendance. Depuis sa de style par défaut, il définit à la{DynamicResource {x:Static SystemColors.ControlTextBrushKey}
, il devient lié à la couleur du système.Le même que pour la couleur du texte. MSDN dit que pour la valeur par défaut de la taille de la police est SystemFonts.MessageFontSize qui dépend des paramètres du système. Famille de police est déterminée de manière similaire à partir de SystemFonts.MessageFontFamily.
Ces deux valeurs par défaut sont passés à la
FrameworkPropertyMetadata
constructeur sur la dépendance de l'enregistrement des biens immobiliers dans leTextElement
constructeur statique.Aller plus loin:
SystemFonts.MessageFontFamily
etSystemFonts.MessageFontSize
wrap interneSystemParameters.NonClientMetrics
qui sont récupérées à partir de la WIN32 natifSystemParametersInfo
http://msdn.microsoft.com/en-us/library/ms724947. Ainsi, le WPF est étroitement intégré avec toutes les Fenêtres de l'INTERFACE utilisateur des trucs comme thèmes, polices, etc.Le même que pour
TextBlock
.Label
dérive deContentControl
qui à son tour dérive deControl
.Control
classe ajoute lui-même en tant que propriétaire de laTextElement.FontFamily
etTextElement.FontSize
propriétés avec les mêmes valeurs par défaut.Voir aussi:
La Valeur De La Propriété De L'Héritage
Mise à JOUR 3
Vous devez comprendre l'idée principale: les valeurs sont héritées. Cela signifie qu'ils peuvent être hérité à partir de n'importe où, de n'importe quel contrôle. Vous pouvez dire exactement lequel elle est héritée de seulement pour une certaine logique de la structure en arborescence. Vous changer un peu les couleurs changent. Quelqu'un met une valeur de la propriété explicitement - et tous les enfants hériteront de la valeur. Par conséquent, vos questions, faire des petits practival sens. Mais ils sont toujours intéressants du point de vue de undestanding WPF.
Substituant les valeurs par défaut
Bien que vous ne pouvez pas modifier les valeurs de la
SystemFonts
propriétés (ils sont en lecture seule), vous n'avez pas à. Pour modifier la taille de la police et de la famille pour l'ensemble de la fenêtre, il suffit d'attribuer les valeurs souhaitées pour leTextElement
propriétés attachées sur leWindow
:et tous les contrôles qui ne sont pas explicitement remplacer l'héritage recevra les paramètres. Pour ceux qui ne substituez - vous aurez à remplacer leurs styles par défaut ou même de les jeter s'ils coder en dur les valeurs.
La même approche fonctionne pour
TextElement.Foreground
(etBackground
et ainsi de suite).J'espère que mon commentaire n'est pas venu à travers comme impoli; si c'est le cas, je suis désolé.
En ce moment je ne comprends pas ce que votre question est. Voulez-vous savoir pourquoi les Étiquettes se comporter différemment de TextBlocks? Voulez-vous savoir comment les couleurs par défaut et d'autres paramètres sont déterminés? Pourquoi n'êtes-vous pas satisfait de mon ou de Rachel réponses?
S'il vous plaît, voir ma mise à JOUR 2 réponses à vos reformuler les questions.
Désolé pour la confusion. Je pense que je n'ai pas l'état de mes questions clairement, j'ai mis à jour (encore une fois), avec la tentative de réponse par moi-même. Vous avez dit "Vous n'avez pas besoin de mettre ceux où dans l'ordre pour eux de travailler" et "soi-disant dépendre sur le thème du système", je suppose que c'est exactement là où mon puzzle est. J'aimerais savoir comment le système ou WPF cadre définit les valeurs par défaut, et non pas sur la façon dont le client app va fournir son propre style d'un TextBlock ou une Étiquette de contrôle; bien que les deux questions sont en quelque sorte liés. Espérons que cela a du sens. Merci!
OriginalL'auteur Pavel Gatilov
Les couleurs par défaut sont tirés à partir du système d'exploitation.
Vous pouvez les remplacer par la création d'un pinceau qui a une clé qui fait référence à un SystemColors brosse clé
Vous devez être fais mal. Rachel est de droit, si vous mettez de l'échantillon de la brosse pour un
ResourceDictionary
il remplace les paramètres du système. Essayez d'utiliserControlTextBrushKey
au lieu deHighlightBrushKey
afin d'augmenter l'effet. Aussi, essayez de placer la brosse pour un haut-niveau logique des éléments de l'arborescence que les contrôles que vous souhaitez affecter. Les ressources d'unLabel
n'affectera pas leLabel
, seuls ses enfants.Gatilov de style en ligne de ressources pour l'Étiquette ont une incidence sur l'Étiquette. Veuillez voir mon montage ci-dessus. Merci.
OriginalL'auteur Rachel
Selon cette: http://msdn.microsoft.com/en-us/library/ms788718.aspx
Et en fonction de cela: http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.fontsize(v=vs. 95).aspx
En outre, vous pouvez trouver beaucoup d'autres valeurs par défaut stockées dans différents endroits dans le site MSDN: http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.fontstyle(v=VS.95).aspx pour le style, qui dit:
OriginalL'auteur Verifex