3

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

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

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, он запускается, но сбой с неопределенной ошибкой. Похоже, что он не добавляет resouces из файла MyResources.xaml.

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

+0

Во-первых, убедитесь, что файл "MyResources.xaml" существует и "Build Action" установлен на "ресурс" – ry8806

+0

Я не думаю, что ресурс необходимо как действие для сборки, так как я получил его только в действии на странице. – frno

ответ

1

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

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

Как я писал в своем текстовом вопросе, я попробовал добавить wi й не хороший результат – frno

+1

Я только понял, что ваш источник не имеет формата corect. Это должно быть «Source =»/{projectname}; component/MyResource.xaml ". Подробнее [здесь] (http://msdn.microsoft.com/en-us/library/system.windows.resourcedictionary.source%28v=vs.95%29.aspx) –

+0

У меня есть Xaml внутри проекта, это достаточно, чтобы называть его так, как я (я его запустил, но почему-то мой ответ здесь не публикуется) – frno

1

Фактически выяснилось.

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

<Application.Resources> 
<ResourceDictionary> 

    my remaining styles with key & target type are here now 

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

EDIT:

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

2) стили внутри ссылочного Xaml все должны содержать ключ (или название)

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

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

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

5) ResourceDictionaries в функции MergedDictionaries как LIFO