Как установить цвет по умолчанию, семейство шрифтов и размер шрифта для TextBlock и Label в приложении WPF?
Изменить: я думаю, вопрос не был сформулирован очень четко. На самом деле он состоит из 4 отдельных:
Как этоTextBlock
получить цвет по умолчанию, если клиентское приложение не предоставляет какого-либо стиля, программно или через xaml?Как этоLabel
получить цвет по умолчанию?Как этоTextBlock
получить размер шрифта по умолчанию и семейство шрифтов, если клиентское приложение не предоставляет какого-либо стиля, ни программно, ни через xaml?Как этоLabel
получить размер шрифта по умолчанию и семейство шрифтов?Кстати, вопросы не о том, какменять или определить стили для цвета / размера шрифта / семейства шрифтовTextBlock
илиLabel
хотя они как-то связаны. Я думаю, что я уже знал ответ для № 2, то естьLabel
получает свой цвет отSystemColors.ControlTextBrushKey и переопределениемConrolTextBrushKey
вот так:
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Red"/>
Вы сможете «глобально» изменить цвет дляLabel
s. После некоторого исследования, я думаю, я также найду ответ для # 1: ATextBlock
наследует цвет переднего плана от содержащего егоWindow
который по умолчанию получает егоForeground
цвет отSystemColors.WindowTextBrushKey, Определив цвет для WindowTextBrush следующим образом:
<Window.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.WindowTextBrushKey}"
Color="Yellow"/>
</Window.Resources>
Вы сможете изменить цвет «переднего плана» дляTextBlock
с внутриWindow
.
Вопрос № 3 и № 4 остаются загадкой для меня, но я предполагаю, что они имеют отношение кSystemFonts.
Надеюсь, это имеет смысл. Мне действительно нравится знать ответы, поскольку они беспокоили меня некоторое время. Большое спасибо!
Ниже оригинальное сообщение:
Если вы посмотрите на стиль дляLabel
в теме (например, «aero.normalcolor.xaml»), которая поставляется с Windows, вы можете найти
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
Который устанавливает цвет дляLabel
, Но нет где тоFontSize
свойство указано в стиле, который, как я полагаю, как-то связан сSystemFonts, ДляTextBlock
, это выглядит еще более загадочно, так как стиль для него в "aero.normalcolor.xaml" имеет только 4 строки:
<Style x:Key="{x:Type TextBlock}"
TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping"
Value="NoWrap"/>
<Setter Property="TextTrimming"
Value="None"/>
</Style>
ГдеLabel
илиTextBlock
получить значения для его цвета и размера шрифта / семейства, если приложение не устанавливает их, и где находятся эти хуки в WPF?
Редактировать:
Это тест-драйв, пытающийся установитьTextBlock
цвет черезSystemColors.ControlTextBrush
(при условии, что это гдеTextBlock
получает свой цвет по умолчанию от, который кажется ложным):
<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>