Kullanıcıları bir Renk Seçici iletişim kutusundan bir renk seçmelerine ve ardından uygulamanın stilini gerçek zamanlı olarak değiştirmelerine izin vererek uygulamanızı daha özelleştirilebilir hale getirmeye çalışıyorum (DynamicResource
ile)WPF: Çalışma zamanı sırasında App.xaml'den Kaynaklar (renkler) değiştirme
app.xaml
'da bulunan belirli kaynakları değiştirme konusunda nasıl geçerim?
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));
Bu app.xaml
dosyanın bir alıntı:
<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>
iyi nedir
bu ama hayır şans (sadece bir test) gibi bir şey denedim Bu formdaki özelleştirilebilirliğe (temel olarak sadece bazı renkleri değiştirerek) bir uygulamaya izin verme yolu?
Sadece sorulan bir önceki soruya this answer bulundu ve ancak Petoj verilen için yorum olarak bahsedilen aynı ınvalidoperationexception istisna alıyorum denedim
[Güncelleme] Cevap. İşte cevabı dan örnek kod:
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;
Ama bir pencere içine ekleyemiyorum çünkü bu stil projemdeki her pencereye uygulanıyor –