Использование системных ресурсов (WPF .NET)

В этом примере демонстрируется использование системных ресурсов. Системные ресурсы предоставляются системой WPF и разрешают доступ к ресурсам операционной системы, таким как шрифты, цвета и значки. Системные ресурсы предоставляют несколько определяемых системой значений как в качестве ресурсов, так и в качестве свойств, чтобы помочь создавать визуальные элементы, совместимые с Windows.

Важно!

Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.

Fonts

Класс SystemFonts позволяет ссылаться на шрифты, используемые операционной системой. Этот класс содержит значения системного шрифта в виде статических свойств и свойства со ссылками на ключи ресурсов, которые можно использовать для динамического доступа к этим значениям во время выполнения. Например, CaptionFontFamily  — это значение SystemFonts, а CaptionFontFamilyKey — соответствующий ключ ресурса.

В следующем примере показано, как получить доступ к свойствам SystemFonts и использовать их в качестве статических значений для создания стиля или настройки блока текста:

<TextBlock FontSize="{x:Static SystemFonts.SmallCaptionFontSize}"
           FontWeight="{x:Static SystemFonts.SmallCaptionFontWeight}"
           FontFamily="{x:Static SystemFonts.SmallCaptionFontFamily}"
           Text="Small Caption Font">
</TextBlock>

Чтобы использовать значения SystemFonts в коде, необязательно использовать статическое значение или ссылку на динамический ресурс. Вместо этого используйте неключевые свойства класса SystemFonts. Хотя неключевые свойства очевидно определены как статические, во время выполнения WPF, размещенной системой, будут пересчитываться свойства в режиме реального времени и правильно учитываться вносимые пользователем изменения значений системы. В приведенном ниже примере показано, как задать параметры шрифта кнопки:

var myButton = new Button()
{
    Content = "SystemFonts",
    Background = SystemColors.ControlDarkDarkBrush,
    FontSize = SystemFonts.IconFontSize,
    FontWeight = SystemFonts.MessageFontWeight,
    FontFamily = SystemFonts.CaptionFontFamily
};

mainStackPanel.Children.Add(myButton);
Dim myButton = New Button() With
{
    .Content = "SystemFonts",
    .Background = SystemColors.ControlDarkDarkBrush,
    .FontSize = SystemFonts.IconFontSize,
    .FontWeight = SystemFonts.MessageFontWeight,
    .FontFamily = SystemFonts.CaptionFontFamily
}

mainStackPanel.Children.Add(myButton)

Динамические шрифты в XAML

Метрики системных шрифтов могут использоваться в качестве статического или динамического ресурса. Используйте динамический ресурс, если требуется метрика шрифта для автоматического обновления во время выполнения приложения. В противном случае используйте статический ресурс.

Примечание.

В случае динамических ресурсов к имени свойства добавляется ключевое слово Key.

В приведенном ниже примере показано, как получить доступ к ресурсам динамических системных шрифтов и использовать их для создания стиля или настройки блока текста:

<TextBlock FontSize="{DynamicResource {x:Static SystemFonts.SmallCaptionFontSize}}"
           FontWeight="{DynamicResource {x:Static SystemFonts.SmallCaptionFontWeight}}"
           FontFamily="{DynamicResource {x:Static SystemFonts.SmallCaptionFontFamily}}"
           Text="Small Caption Font">
</TextBlock>

Параметры

Класс SystemParameters позволяет ссылаться на свойства системного уровня, такие как размер основного дисплея. Этот класс содержит как свойства значений системных параметров, так и ключи ресурсов, которые привязываются к значениям. Например, FullPrimaryScreenHeight  — это значение свойства SystemParameters, а FullPrimaryScreenHeightKey — соответствующий ключ ресурса.

В приведенном ниже примере показано, как получить доступ и использовать статические значения объекта SystemParameters для создания стиля или настройки кнопки. В этом примере разметки размер кнопки определяется путем применения к кнопке значений SystemParameters:

<Button FontSize="8" 
        Height="{x:Static SystemParameters.CaptionHeight}"
        Width="{x:Static SystemParameters.IconGridWidth}"
        Content="System Parameters">
</Button>

Чтобы использовать значения SystemParameters в коде, необязательно использовать ссылки на статические или динамические ресурсы. Вместо этого используйте значения класса SystemParameters. Хотя неключевые свойства очевидно определены как статические, во время выполнения WPF, размещенного системой, будут пересчитываться свойства в режиме реального времени и правильно учитываться вносимые пользователем изменения значений системы. В приведенном ниже примере показано, как задать ширину и высоту кнопки с помощью значений SystemParameters:

var myButton = new Button()
{
    Content = "SystemParameters",
    FontSize = 8,
    Background = SystemColors.ControlDarkDarkBrush,
    Height = SystemParameters.CaptionHeight,
    Width = SystemParameters.CaptionWidth,
};

mainStackPanel.Children.Add(myButton);
Dim myButton = New Button() With
{
    .Content = "SystemParameters",
    .FontSize = 8,
    .Background = SystemColors.ControlDarkDarkBrush,
    .Height = SystemParameters.CaptionHeight,
    .Width = SystemParameters.CaptionWidth
}

mainStackPanel.Children.Add(myButton)

Динамические параметры в XAML

Метрики параметров системы могут использоваться в качестве статических или динамических ресурсов. Используйте динамический ресурс, если требуется метрика параметра для автоматического обновления во время выполнения приложения; в других случаях используйте статический ресурс.

Примечание.

В случае динамических ресурсов к имени свойства добавляется ключевое слово Key.

В приведенном ниже примере показано, как получить доступ к ресурсам динамических параметров системы и использовать их для создания стиля или настройки кнопки. В этом примере XAML размер кнопки определяется путем назначения значений SystemParameters для ширины и высоты кнопки.

<Button FontSize="8" 
        Height="{DynamicResource {x:Static SystemParameters.CaptionHeightKey}}"
        Width="{DynamicResource {x:Static SystemParameters.IconGridWidthKey}}"
        Content="System Parameters">
</Button>

См. также