ユーザーは、カラーピッカーダイアログから色を選択してリアルタイムでアプリケーションのスタイルを変更できるようにすることで、アプリケーションをよりカスタマイズ可能にしようとしています(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>
最善である私は、このしかし運(単なるテスト)のようなものを試してみました
アプリケーションにこの形式のカスタマイズ機能(基本的には色の変更のみ)を許可する方法はありますか?
[更新]
私は頼まれた前の質問からthis answerを見つけ、それを試してみましたが、私は例外Petojが与えられたため、コメントに記載された同じInvalidOperationExceptionがを取得しています回答。ここに答えからのサンプルコードは次のとおりです。
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;
しかし、このスタイルはプロジェクトのすべてのウィンドウに適用されるため、ウィンドウに追加できません。 –