Я пытаюсь сделать мое приложение более настраиваемым, позволяя пользователям выбирать цвет из диалогового окна «Выбор цвета», а затем изменять стиль приложения в режиме реального времени (с DynamicResource
)WPF: изменение ресурсов (цветов) из App.xaml во время выполнения
Как я могу изменить определенные ресурсы, которые находятся в app.xaml
?
Я пытался что-то подобное, но не повезло (просто тест):
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));
Это выдержка из файла app.xaml
:
<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>
Что является лучшим способ позволить этой форме настраиваемости (в основном, просто изменить некоторые цвета) в приложении?
[Update]
Я только что нашел this answer из предыдущего вопроса, который был задан, и попробовал, но я получаю то же InvalidOperationException исключение Petoj упоминается в комментариях для данного ответ. Вот пример кода из ответа:
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;
Но я не могу добавить его в окно, потому что этот стиль применим ко всем окнам моего проекта. –