Как программно установить цвет элемента управления WPF на системный цвет, чтобы он обновлялся при изменении цветовой схемы?
Как я могу сделать это в коде позади WPF?
<Grid Background="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}"/>
4 ответа
Я только что нашел уродливое решение:
grid1.SetResourceReference(
Control.BackgroundProperty,
SystemColors.DesktopBrushKey);
Я надеюсь, что кто-то опубликует лучший (я хотел бы видеть что-то вроде grid1.Background = BackgroundBrush, потому что синтаксис SetResourceReference - это шаг назад по сравнению с Windows Forms).
Это, должно быть, было добавлено в более позднюю версию WPF, так как это было первоначально опубликовано, потому что ваш оригинальный код работает хорошо для меня (я использую WPF 4.5)
<Grid Background="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}"/>
Методы расширения могут помочь:
public static class FrameworkElementExtensions
{
// usage xPanel.SetBackground(SystemColors.DesktopBrushKey);
public static void SetBackground(this Panel panel, ResourceKey key)
{
panel.SetResourceReference(Panel.BackgroundProperty, key);
}
// usage xControl.SetBackground(SystemColors.DesktopBrushKey);
public static void SetBackground(this Control control, ResourceKey key)
{
control.SetResourceReference(Control.BackgroundProperty, key);
}
}
.NET Framework Поддерживается в версии 3.0
https://msdn.microsoft.com/en-us/library/system.windows.systemcolors.highlightbrush(v=vs.85).aspx https://msdn.microsoft.com/en_us/library/system.windows.systemcolors.highlightbrushkey(v=vs.85).aspx
this.background=SystemColors.HighlightBrush;