Как установить цвет по умолчанию, семейство шрифтов и размер шрифта для 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"/>

Вы сможете «глобально» изменить цвет дляLabels. После некоторого исследования, я думаю, я также найду ответ для # 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>

Ответы на вопрос(3)

Ваш ответ на вопрос