私が知っているこのトピックに関する2つのまともなオンラインリソースがあります。XAMLガイドラインとこれは不完全なものです。
そして、私はまだそれを完全に理解していません!
たとえば、2つのプロジェクトがあるとします。
- Wpf.ControlLibrary.proj
- Wpf.App.proj
Wpfアプリ内には、さまざまなビューがエラーフィードバックを提供して閉じるための統一された方法を形成するために連携する3つのリソースがあります。これらのリソースのうち2つは、DataTemplateを介して利用可能になります。
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="EditedStateIndicator.xaml" />
<ResourceDictionary Source="CloseCrossToggleButton.xaml" />
</ResourceDictionary.MergedDictionaries>
<DataTemplate x:Key="SatelliteViewClosePanelStyle" >
<StackPanel Orientation="Horizontal">
<Button Style="{StaticResource CloseCrossButtonStyle}" />
<Ellipse Style="{StaticResource EditedStateIndicatorStyle}" />
</StackPanel>
</DataTemplate>
これは、「SatelliteView.ResourceLibrary.xaml」で利用できるようになります。
<!-- ##Satellite View Library-->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="SatelliteViewClosePanel.xaml" />
<ResourceDictionary Source="InlineBorder.xaml" />
</ResourceDictionary.MergedDictionaries>
これは、「ControlLibrary.ResourceLibrary.xaml」で利用できるようになります
<!-- ##Master Control Library reference-->
<ResourceDictionary.MergedDictionaries>
...
<ResourceDictionary Source="CustomControlStyles/SatelliteViewStyles/ResourceLibrary.xaml" />
...
</ResourceDictionary.MergedDictionaries>
そして、Wpf.Appプロジェクト、文字通りApp.xamlで消費されます
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Wpf.ControlLibrary;component/ResourceLibrary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
アプリ内には、コントロールライブラリへのアクセスも必要なコンテンツを使用するビューがあります。
<ResourceDictionary.MergedDictionaries>
Source="pack://application:,,,/SWpf.ControlLibrary;component/ResourceLibrary.xaml" />
</ResourceDictionary.MergedDictionaries>
<DataTemplate x:Key="AvatarEditingControlTemplate">
...
</DataTemplate>
さて、あなたの質問は何ですか?
- DataTemplateが「ControlLibrary.ResourceLibrary」を必要とするか、エラーをスローすることを考えると、App.Resourcesでそれを利用できることはどのような利点がありますか?アプリのリソースは、すべてのリソースをアプリで利用できるようにする必要があると思いましたか?
- ここに示されているリソースをどのように整理すればよいでしょうか。それとも、これは適切なアプローチですか。私が見逃したトピックに関する他の良いリンクはありますか?ほとんどの重要なプロジェクトでは、ある種の共有リソースライブラリを実行するために何らかのコードが必要ですか?
乾杯、
ベリール