ResourceDictionary организации

На эту тему я знаю два приличных онлайн-ресурса, Руководство по XAML, и этот менее полный.

И я до сих пор не совсем понял!

Например, скажем, у меня есть два проекта:

  1. Wpf.ControlLibrary.proj
  2. 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>

Итак, каков твой вопрос?

  1. Учитывая, что DataTemplate требует "ControlLibrary.ResourceLibrary" или выдает ошибку, что хорошего в том, что он доступен в App.Resources? Я думал, что ресурсы приложения должны сделать все ресурсы доступными для приложения?
  2. Как мне лучше организовать ресурсы, показанные здесь, или это достойный подход? Любые другие хорошие ссылки на тему, которую я пропустил? Требуется ли большинству нетривиальных проектов некоторый код для запуска какой-либо библиотеки общих ресурсов?

Ура,
Berryl

0 ответов

Другие вопросы по тегам