WP7 Mango ResouceDictionary MergedDictionaries - PullRequest
       52

WP7 Mango ResouceDictionary MergedDictionaries

3 голосов
/ 03 апреля 2012

У меня проблема с ResourceDictionary в WP7 Mango.

Большая часть того, что я мог найти в Интернете, так проста:

1) Файл XAML с телом:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 <Style x:Key="TextBlockStyle1" TargetType="TextBlock">
 <Setter Property="Foreground" Value="Orange"/>
 <Setter  Property="FontSize" Value="24"/>
 <Setter  Property="VerticalAlignment" Value="Bottom"/>
</Style>
</ResourceDictionary>

2) Добавить в App.xaml следующее:

 <Application.Resources>
    <ResourceDictionary>
       <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="MyResources.xaml"/>
       </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
 </Application.Resources>

Не уверен, почему это не работает. При этом я получаю исключение:

Тип ResourceDictionary находится внутри ResourceDictionary и не имеет ключа.

Когда я добавляю ked во вторую строку xaml на шаге 2, он запускается, но вылетает с неопределенной ошибкой. Похоже, он не добавляет ресурсы из файла MyResources.xaml.

Может ли кто-нибудь указать здесь решение?

Ответы [ 2 ]

1 голос
/ 04 апреля 2012

На самом деле понял.

Я пытался заставить его работать без ключа и обнаружил, что стили, которые я оставил в App.xaml, создавали проблему.Поэтому все оставшиеся стили в App.xaml мне пришлось переместить внутрь, хотя они были уникальными.

<Application.Resources>
<ResourceDictionary>

   my remaining styles with key & target type are here now

   <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="MyResources.xaml"/>
   </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

РЕДАКТИРОВАТЬ:

Несколько более важных деталей, которые могут сэкономить кому-то время и забрали менядолгое время, чтобы понять это: 1) Как рекомендует MSDN, вы не должны помещать Key в ResourceDictionary

2) Все стили внутри ссылочного Xaml должны содержать Key (или Name)

3)Остальные стили должны быть размещены, как описано выше

4) В следующем коде, если вы переопределите базовый стиль, на котором основаны некоторые другие стили, изменения не будут отражены, пока вы не переопределите также и унаследованные стили в MyResources2..xaml (альтернативно заменить базовый стиль в MyResources.xaml на стиль в MyResources2.xaml)

<ResourceDictionary.MergedDictionaries>
  <ResourceDictionary Source="MyResources.xaml"/>
  <ResourceDictionary Source="MyResources2.xaml"/>             
</ResourceDictionary.MergedDictionaries> 

5) ResourceDictionaries в MergedDictionaries функционируют как LIFO

1 голос
/ 03 апреля 2012

Вам необходимо установить ключ для ResourceDictionary в App.xaml.

<Application.Resources>
    <ResourceDictionary x:Key="keyname">
       <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="MyResources.xaml"/>
       </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
...