Использовать внешний ResourceDictionary в приложении WindowsPhone 7

Я пытаюсь создать ResourceFile Called DataTemplate.xaml во внешней dll и использовать его на странице WP7. Когда я делаю следующее в заголовке моей страницы, я получаю сообщение об ошибке

<ResourceDictionary Source="pack://application:,,,/WP7SharedClassLibrary;component/DataTemplate.xaml" />

Ошибка "Текущий проект не поддерживает" приложение "как компонент полномочий URI пакета.

Кто-нибудь еще сталкивался с этим и решил это?

Ответ 1

Мне удалось заставить это работать, выполнив следующие шаги:

  • Создал стандартное приложение WP7, используя шаблон приложения "Приложение для Windows Phone" под названием "WP7ExternalResourcesTest".
  • Добавлен проект в одно и то же решение с использованием шаблона библиотеки Windows Phone Class Library под названием "WP7ExternalResourcesTestLibrary".
  • Удален файл Class.cs по умолчанию из проекта библиотеки.
  • Добавлен файл под названием "External.xaml" с использованием шаблона "XML файл" и установите "Build Action" на "Страница".
  • Добавлен следующий XAML в новый файл XAML:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <SolidColorBrush x:Key="ForegroundBrush" Color="Red" />
    </ResourceDictionary>
    
  • Создал проект библиотеки, а затем добавил ссылку на него из проекта WP7ExternalResourcesTest.
  • В WP7ExternalResourcesTest открылся App.xaml и изменил раздел Application.Resources на следующее:

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/WP7ExternalResourcesTestLibrary;component/External.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    
  • В MainPage.xaml добавлен Foreground="{StaticResource ForegroundBrush}" в TextBlock с именем "PageTitle".
  • Запустите приложение в эмуляторе. Конечным результатом было то, что TextBlock правильно отображал слова "имя страницы" красным цветом.

Надеюсь, что это поможет.

Ответ 2

Я попробовал синтаксис пакета, пытаясь разделить файлы XAML ResourceDictionary и получил то же сообщение об ошибке. Я закончил использование этого синтаксиса, и это сработало для меня.

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyDLLName;component/Folder/MyXAMLFile.xaml"/>                
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Ответ 3

Silverlight не поддерживает URI пакетов. Это функция WPF.

Если вы исследуете тип свойства Source для объекта Image в Silverlight, он Uri. Но в WPF источником является свойство зависимости с типом ImageSource.