Pregunta ¿Cómo puedo establecer el color de un control WPF en un color de sistema mediante programación, para que se actualice en los cambios de esquema de color?


¿Cómo puedo hacer esto en el código subyacente de WPF?

<Grid Background="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}"/>

32
2018-03-09 23:53


origen


Respuestas:


Acabo de encontrar una solución fea:

grid1.SetResourceReference(
    Control.BackgroundProperty,
    SystemColors.DesktopBrushKey);

Espero que alguien publique uno mejor (me gustaría ver algo como grid1.Background = BackgroundBrush, porque la sintaxis de SetResourceReference es un paso atrás de Windows Forms).


13
2018-03-10 00:12



Los métodos de extensión pueden ayudar:

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);
    }
}

6
2018-03-10 07:29



Esto debe haberse agregado a una versión posterior de WPF ya que se publicó originalmente porque el código original funciona bien para mí (estoy usando WPF 4.5)

<Grid Background="{DynamicResource {x:Static SystemColors.DesktopBrushKey}}"/>


4
2017-09-28 14:08



.NET Framework Compatible con: 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;

2
2018-03-18 06:03