Tôi đang cố gắng làm cho ứng dụng của mình tùy biến hơn bằng cách cho phép người dùng chọn màu từ hộp thoại Bộ chọn màu, sau đó thay đổi kiểu của ứng dụng trong thời gian thực (với DynamicResource
)WPF: Thay đổi Tài nguyên (màu) từ App.xaml trong thời gian chạy
Tôi làm cách nào để thay đổi các tài nguyên cụ thể nằm trong số app.xaml
?
Tôi đã thử một cái gì đó như thế này nhưng không có may mắn (just a test):
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));
này một đoạn trích của tập tin 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>
tốt nhất là gì cách để cho phép hình thức tùy chỉnh này (về cơ bản chỉ thay đổi một số màu) cho một ứng dụng?
[Cập nhật]
Tôi chỉ tìm thấy this answer từ một câu hỏi trước đó đã hỏi, và thử nó nhưng tôi nhận được cùng InvalidOperationException ngoại lệ Petoj đề cập trong các ý kiến cho cho câu trả lời. Đây là đoạn mã mẫu từ câu trả lời:
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;
Nhưng tôi không thể thêm nó vào cửa sổ vì kiểu này áp dụng cho mọi cửa sổ trong dự án của tôi –