2

私はこれについてしばらく読んでいますが、私を助けることができる答えを見つけることができないようです.

私のプロジェクトには、コントロールのスタイルがたくさん含まれているライブラリがあります。これらのスタイルは、リソースを静的リソースとして使用します。したがって、「リソース ツリー」は基本的に次のようになります。

  • テーマ.xaml
    • SizeResources.xaml
    • ColorResources.xaml
    • ControlStyles.xaml
      • Control1.xaml
      • Control2.xaml

Theme.xaml は、SizeResources、ColorResources、および ControlStyles をマージします。ControlStyles は、特定のコントロールのすべての xaml をマージします。

今、私のアプリケーションでそのテーマを適用したいので、OnStartup で Theme.xaml を Application.Current.Resources.MergedDictionaries に追加します。これは正常に機能し、すべてのキーがそこにあります。コントロールを使用しようとすると、サイズや色のリソースが見つからないなどの例外が発生します。具体例:

ColorResources で定義された背景色を持つ特別なボタンがあります。私の ButtonStyle はこのリソースを静的リソースとして使用します。アプリケーション プロジェクトでそのボタンを使用すると、バックグラウンド リソースが見つからないという例外が発生します。control1.xaml で静的リソースを動的リソースに変更すると、機能します。

静的リソースでこれを行うことができない理由はありますか? 私の理解では、静的も同様に機能するはずです。

4

2 に答える 2

2

定義しようとすると:

<Rectangle Fill="{StaticResource SpecialBackgroundBrush}"/>

あなたの代わりに、Buttonそれは機能しますか?きっとそうなると思います。そうだとすると、あなたがする必要があるのは、Buttonスタイル自体がブラシに静的にアクセスできることを確認することです。したがって、Button.xamlには、次のようなものが必要です。

<ResourceDictionary ...>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ColorResources"/>
    </ResourceDictionary.MergedDictionaries>

    <Style TargetType="Button">
        ...
    </Style>
</ResourceDictionary>

これで問題が解決しない場合は、XAMLの例を確認すると便利です。

于 2012-02-20T14:19:43.053 に答える
0

動的リソースでさえ、隣接するマージされた辞書で見つからないという欠点があります。しかし、ここでの本当の問題はスキニングにあります。色だけを変更したいが、コントロール テンプレートは変更したくない場合はどうすればよいでしょうか。

色とテンプレートを 2 つの XAML ファイルに分けることができますが、これらの色ファイルが複数 (スキンごとに 1 つ) ある場合、どの "色" XAML ファイルをテンプレート ファイルに含める必要がありますか?

于 2012-07-12T13:41:56.537 に答える