ユーザーがカラー ピッカー ダイアログから色を選択できるようにし、アプリケーションのスタイルをリアルタイムで変更することで、アプリケーションをよりカスタマイズしやすくしようとしています ( を使用DynamicResource
) 。
にある特定のリソースを変更するにはどうすればよい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 x:Key="HeaderBackground" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#82cb02" Offset="1"/>
<GradientStop Color="#82cb01" Offset="0.2"/>
<GradientStop Color="#629a01" Offset="0.5"/>
</LinearGradientBrush>
</Application.Resources>
この形式のカスタマイズ可能性 (基本的にはいくつかの色を変更するだけ) をアプリケーションに許可する最良の方法は何ですか?
[アップデート]
以前の質問からこの回答を見つけて試してみましたが、指定された回答のコメントに記載されているのと同じ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;