WPF: Alterando recursos (cores) do App.xaml durante o tempo de execução
Estou tentando tornar meu aplicativo mais personalizável, permitindo que os usuários escolham uma cor na caixa de diálogo Seletor de cores e alterando o estilo do aplicativo em tempo real (comDynamicResource
)
Como faço para alterar recursos específicos que residem noapp.xaml
?
Eu tentei algo assim, mas sem sorte (apenas um teste):
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 é um trecho daapp.xaml
Arquivo
<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>
Qual é a melhor maneira de permitir essa forma de personalização (basicamente apenas alterando algumas cores) para um aplicativ
[Atualizar
Acabei de encontraresta resposta de uma pergunta anterior que foi feita e tentei, mas estou recebendo o mesmo InvalidOperationException exceção Petoj mencionada nos comentários para a resposta dada. Aqui está o código de exemplo da resposta:
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;