Несколько ResourceDictionary с одним и тем же ключом DataTemplate?

#wpf #xaml #resourcedictionary

#wpf #xaml #resourcedictionary

Вопрос:

У меня есть ResourceDictionary, такой как (MyResourceDictionary):

 <ResourceDictionary xmlns
        .....
        >

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="SeriesTwo.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <DataTemplate x:Key="SeriesDetailedInformation">
            <StackPanel>
                ......content...
            </StackPanel>
        </DataTemplate>
</ResourceDictionary>
  

SeriesTwo.xaml выглядит следующим образом, а также имеет DataTemplate с тем же именем

 <ResourceDictionary xmlns=
        .....
        >
        <DataTemplate x:Key="SeriesDetailedInformation">
            <DataGrid>
                ......content...
            </DataGrid>
        </DataTemplate>
</ResourceDictionary>
  

На моей странице просмотра какой SeriesDetailedInformation шаблон данных используется? Зависит ли это от того, на какой словарь ресурсов я ссылаюсь первым на своей странице?

Также приветствуются любые хорошие ссылки и другие материалы для чтения по этой теме.

Ответ №1:

Пара вещей с этой страницы, похоже, имеют отношение к вашему вопросу:

При поиске в коллекции MergedDictionaries сначала выполняется поиск по последнему добавленному ResourceDictionary, и поиск прекращается, как только запрошенный ключ найден. Другими словами, логика извлечения из коллекции объединенных словарей ресурсов вводится последней и выводится первой.

И:

Ресурсы в объединенном словаре занимают местоположение в области поиска ресурсов, которая находится сразу после области основного словаря ресурсов, в который они объединены.

Из этого я делаю вывод, что сначала будет использоваться DataTemplate определенный в вашем основном словаре, затем SeriesTwo и любой, на который ссылаются до / выше SeriesTwo после этого.

Кроме того, почему бы просто не попробовать это и посмотреть, что получится? Я поддерживаю решение, которое я называю «DumbCrapTestApp», где я тестирую подобные вещи, когда мне интересно, как что-то работает. В нем есть консольное приложение, когда мне просто нужно что-то протестировать на языке, и приложение WPF и Silverlight, когда я хочу что-то там попробовать. Если бы мне нужно было приложение WinForms, я бы просто добавил его и делал там свое дело. Я просто помещаю любой код, который хочу протестировать, в соответствующее приложение, устанавливаю его в качестве своего начального проекта и ухожу. Это действительно полезно для выяснения этих мелочей, и я даже использовал его, чтобы получить разъяснения и проверить ответы, прежде чем публиковать их здесь, на SO.

Комментарии:

1. Спасибо. и «почему бы просто не попробовать это и посмотреть, что получится» …. потому что я был ленив: p и у меня был мозговой штурм, и я не мог додуматься посмотреть документы самостоятельно.