ResourceDictionary организации
На эту тему я знаю два приличных онлайн-ресурса, Руководство по XAML, и этот менее полный.
И я до сих пор не совсем понял!
Например, скажем, у меня есть два проекта:
- Wpf.ControlLibrary.proj
- Wpf.App.proj
Внутри Wpf-приложения у меня есть три ресурса, которые работают вместе, чтобы сформировать единый способ для разных представлений предоставлять обратную связь по ошибкам и закрывать. Два из этих ресурсов доступны через 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? Я думал, что ресурсы приложения должны сделать все ресурсы доступными для приложения?
- Как мне лучше организовать ресурсы, показанные здесь, или это достойный подход? Любые другие хорошие ссылки на тему, которую я пропустил? Требуется ли большинству нетривиальных проектов некоторый код для запуска какой-либо библиотеки общих ресурсов?
Ура,
Berryl