アプリケーション テーマ用に、別のクラス ライブラリ MyApp.Themes.dll を作成しました。このライブラリのルート フォルダーには、Standard.xaml があります。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/MyApp.Themes;component/Standard/Accordion.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Standard フォルダーには、Accordion.xaml があります。
<ResourceDictionary xmlns:layoutPrimitivesToolkit="..."
xmlns:layoutToolkit="..."
...>
<!-- layoutPrimitivesToolkit:AccordionButton -->
<Style TargetType="layoutPrimitivesToolkit:AccordionButton">
...
</Style>
...
</ResourceDictionary>
これは、WPF Toolkit アコーディオン コントロールの既定のスタイルですが、AccordionItem のスタイルは、背景を透明に設定するように変更されています (既知のバグである青ではなく)。
両方の xaml ファイルで、ビルド アクションは "Resource" に設定されています。さて、MyApp WPF プロジェクトで MyApp.Themes ライブラリを参照した後、App.xaml に次のように記述しました。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/MyApp.Themes;component/Standard.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
動作しません (エラーはありません。スタイルが適用されていないだけです)。Accordion.xaml スタイルを App.xaml に直接コピーして貼り付けると、機能します。一部の人々は、ダミーのリソース ディクショナリを追加することを提案したので、MergedDictionaries 終了タグの後に App.xaml に次を追加しました。
<Style TargetType="{x:Type layoutToolkit:AccordionItem}" />
繰り返しますが、うまくいきません。誰かがこれを解決するのを手伝ってくれますか? ちなみに、私は他の人が提案したアプローチを試しませんでした - basedOn を使用します。これを行う必要がある場合は、MyApp.Themes で行いたいと思います。これにより、App.xaml でテーマをより適切に使用できるようになります。前もって感謝します。
UPDATE1: Accordion.xaml コンテンツを Standard.xaml に直接コピーして貼り付けると機能します
UPDATE2: Standard.xaml でローカル アセンブリ リソース ファイル URI (http://msdn.microsoft.com/en-us/library/aa970069.aspx) を試しました:
<ResourceDictionary Source="pack://application:,,,/Standard/Accordion.xaml"/>
standard/accordion.xaml が見つからないというエラーがスローされます。