1

アプリケーションの配色を動的にしようとしています。これにより、アプリケーションの配色を決定するプロパティ(できればデータベースから取得)に色の値を設定できます。

Resources.xamlファイルがあり、アプリケーションの色とスタイルを設定して、すべてのコントロールとウィンドウで使用しています。リソースファイルの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}">

私のMainWindow.xamlのDataContextは、ApplicationViewModelと呼ばれるクラスであり、ViewModelBaseから継承します。このクラスは、文字列「Teal」を返すプロパティ「MainApplicationColor」を持ち、そのSolidColorBrushの色をFallbackValueから変更します。今のところ色をハードコーディングしていますが、これは将来データベースから自分の価値を取得したい場所です。現在、色は変化していないので、バインディングソースに何か問題があると思います。これは、明らかに期待どおりに機能していないためです。

ありがとう、

クララ

4

1 に答える 1

1

問題はあなたのSolidColorBrush.Color財産のようBindingです。

  1. そこに祖先タイプがあるべきであり、そうではApplicationArchitecture:MainWindowありません ApplicationArchitecture:ViewModelBase

  2. パスには、を含める必要がありますDataContext

このような....

  <SolidColorBrush x:Key="ApplicationMainBackgroundBrush"
                   Color="{Binding Path=DataContext.MainApplicationColor,
                              RelativeSource={RelativeSource FindAncestor, 
                                  AncestorType={x:Type ApplicationArchitecture:MainWindow},
                                      Mode=FindAncestor},
                                          FallbackValue=CornflowerBlue}"/>

これが役立つかどうか教えてください。

于 2011-09-08T16:53:49.887 に答える