WPFでのバインディングにより、リソーススタイルを動的に設定します
-
28-10-2019 - |
質問
アプリケーションの配色を決定するプロパティ(できればデータベースから来る)にカラー値を作成できるように、アプリケーションの配色を動的にしようとしています。
Resources.xamlファイルがあり、アプリケーションに色とスタイルを設定し、すべてのコントロールとWindows全体で使用します。リソースファイルのSolidColorbrushの色を私のViewModelのプロパティにバインドして、この色が現在のアプリケーション値に基づいて変更できるようにしたいと思います。これが私がこれまでに持っているものですが、それは機能していないので、私は何かを逃しているに違いありません。
resources.xamlファイルのコード:
<SolidColorBrush x:Key="ApplicationMainBackgroundBrush" Color="{Binding Path=MainApplicationColor, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ApplicationArchitecture:ViewModelBase}, Mode=FindAncestor}, FallbackValue=CornflowerBlue}"/>
mainWindow.xamlファイルのコード:
<Grid Grid.Row="0" x:Name="gridControl" Background="{DynamicResource ApplicationMainBackgroundBrush}">
My MainWindow.xamlのデータコンテキストは、applicationViewModelと呼ばれるクラスであり、ViewModelbaseから継承されます。ビューモデルベースは、「MainApplicationColor」を「Teal」に戻すプロパティ「MainApplicationColor」を持ち、そのSolidColorbrushの色をFallBackValueから変更します。私は今のところハードコーディングをしていますが、これは将来データベースから自分の価値を取得したい場所です。色は現在変化していないので、私の拘束力のあるソースに何か問題があると思います。明らかに、そうすべきだと思うように機能していないからです。
ありがとう、
クララ
解決
問題はあなたのようです SolidColorBrush.Color
プロパティの Binding
.
そこには祖先のタイプがあるはずです
ApplicationArchitecture:MainWindow
と いいえApplicationArchitecture:ViewModelBase
.パスにはを含める必要があります
DataContext
初期化。
このような....
<SolidColorBrush x:Key="ApplicationMainBackgroundBrush"
Color="{Binding Path=DataContext.MainApplicationColor,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ApplicationArchitecture:MainWindow},
Mode=FindAncestor},
FallbackValue=CornflowerBlue}"/>
これが役立つかどうか教えてください。