WPF: Cambio de recursos (colores) desde App.xaml durante el tiempo de ejecución

Intento hacer que mi aplicación sea más personalizable permitiendo a los usuarios elegir un color del cuadro de diálogo Selector de color y luego cambiar el estilo de la aplicación en tiempo real (conDynamicResource)

¿Cómo hago para cambiar los recursos específicos que residen en laapp.xaml ?

He intentado algo como esto pero no tuve suerte (solo una prueba):

var colorDialog = new CustomControls.ColorPickerDialog();
var dResult = colorDialog.ShowDialog();
var x = Application.Current.Resources.Values.OfType<LinearGradientBrush>().First();
x = new LinearGradientBrush();
x.GradientStops.Add(new GradientStop(colorDialog.SelectedColor,1));

Este es un extracto de laapp.xaml archivo

<Application.Resources>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" x:Key="HeaderBackground">
            <GradientStop Color="#82cb02" Offset="1"/>
            <GradientStop Color="#82cb01" Offset="0.2"/>
            <GradientStop Color="#629a01" Offset="0.5"/>
        </LinearGradientBrush>

Cuál es la mejor manera de permitir esta forma de personalización (básicamente solo cambiando algunos colores) en una aplicación?

[Actualizar

Acabo de encontraresta respuesta de una pregunta anterior que se hizo y probé pero estoy obteniendo la misma InvalidOperationException excepción Petoj mencionó en los comentarios para la respuesta dada. Aquí está el código de muestra de la respuesta:

Xaml:

<LinearGradientBrush x:Key="MainBrush" StartPoint="0, 0.5" EndPoint="1, 0.5" >
    <GradientBrush.GradientStops>
        <GradientStop Color="Blue" Offset="0" />
        <GradientStop Color="Black" Offset="1" />
    </GradientBrush.GradientStops>
</LinearGradientBrush>

C#

LinearGradientBrush myBrush = FindResource("MainBrush") as LinearGradientBrush;
myBrush.GradientStops[0].Color = Colors.Red;

Respuestas a la pregunta(4)

Su respuesta a la pregunta