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

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

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

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

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


person Derik Whittaker    schedule 20.05.2010    source источник


Ответы (3)


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

  1. Создано стандартное приложение WP7 с использованием шаблона приложения «Приложение для Windows Phone» под названием «WP7ExternalResourcesTest».
  2. В то же решение добавлен проект с использованием шаблона «Библиотека классов Windows Phone» под названием «WP7ExternalResourcesTestLibrary».
  3. Удален файл Class.cs по умолчанию из проекта библиотеки.
  4. Добавил файл с именем «External.xaml», используя шаблон «Файл XML», и установил «Действие сборки» на «Страница».
  5. В новый файл 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>
    
  6. Создал проект библиотеки, а затем добавил к нему ссылку из проекта WP7ExternalResourcesTest.
  7. В WP7ExternalResourcesTest откройте App.xaml и измените раздел Application.Resources на следующее:

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

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

person Derek Lakin    schedule 24.01.2011
comment
Дох! Похоже, я забыл шаг 6 :-( В моем случае мне пришлось ссылаться не только на внешний проект, но и на WP_Utilities.DLL из другого проекта, на котором был основан внешний проект. Спасибо за подробное описание! - person Greg Bray; 27.01.2011
comment
Кроме того, я только что обнаружил, что WP8 не любит точку в имени сборки, на которую ссылаются. Если у вас возникли проблемы с его работой, это может быть вашей проблемой. - person moswald; 20.06.2013
comment
так вам действительно нужно поместить ResourceDictionary в отдельную сборку? - person George Birbilis; 11.11.2014

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

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyDLLName;component/Folder/MyXAMLFile.xaml"/>                
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
person Rich Reuter    schedule 02.06.2010
comment
Не работает для меня. Дает значение атрибута /WP_Utilities;component/Resources/PerformanceProgressBar.xaml вне допустимого диапазона. [Строка: 17 Позиция: 37] --- Внутреннее исключение --- Ошибка KeyNotFoundException во время выполнения. Каков тип сборки вашего файла MyXAMLFile.xaml? - person Greg Bray; 23.01.2011

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

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

person Simon Brangwin    schedule 12.07.2010