カスタム コントロール、画像、スタイルなどを含む一連のカスタム アクティビティ デザイナーを開発しています。デザイナー XAML は、ライブラリ プロジェクト内の複数のサブディレクトリに分散しています ( WPF アプリケーションではないため、app.xaml は利用できません)。
通常の WPF アプリケーションの app.xaml のように、リソースを格納するための中心的な場所が必要です。
現在、次のようにprojectdir \Properties\lib.xaml ファイルを使用しています。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="TrafficLight">
...
</ControlTemplate>
</ResourceDictionary>
そして、次のようにすべてのデザイナー XAML からこれを参照します。
<sap:ActivityDesigner.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ActDesLib;component/Properties/lib.xaml" />
</ResourceDictionary.MergedDictionaries>
ここで、ActDesLibはアセンブリの名前です。
これは機能しますが、少し不器用に見えます。それを行うより良い方法はありますか?
個々の XAML ファイルに特別なマークアップを追加する必要なく、ライブラリ プロジェクトに自動的に含まれる "魔法の" app.xaml のようなファイルはありますか? これにより、複数の開発者が異なるデザイナーで作業している場合でも、一貫したスタイルを適用することが非常に簡単になります。
ところで: Source="..." 属性で相対パスを使用しようとしました。VS2010 内のワークフローでアクティビティを使用すると、これは機能しませんでした。リソースが見つかりませんでした。アセンブリ名を含む絶対パスを使用すると、正常に機能します。しかし、VS2010 または再ホストされたデザイナーが、リソース ディクショナリ ファイルへのパスを、XAML 内の相対参照だけで自動的に見つける方法はありませんか?