XAML: как определить шаблоны данных и стили для использования в нескольких проектах - PullRequest
5 голосов
/ 11 июня 2009

Я начинаю разрабатывать приложение для рабочего стола с использованием WPF (.net 3.5 sp1, только с VS, пока не смешано).

Я нахожусь в том месте, где у меня есть несколько общих компонентов многократного использования в нескольких библиотеках.

Где я могу определить свои стили и шаблоны данных, чтобы их можно было повторно использовать в нескольких проектах, чтобы у меня был единообразный внешний вид?

Я смотрел ResourceDictionaries, но не уверен, что

  1. Это то, что мне нужно
  2. Если они - то, что мне нужно, как я могу «импортировать» их в другой проект и ссылаться на их содержание в Xaml.

Спасибо

Ответы [ 3 ]

10 голосов
/ 11 июня 2009

ResourceDictionary - это путь, вы можете скопировать файл xaml, содержащий словарь ресурсов между проектами, или скомпилировать их в DLL, на которую вы будете ссылаться из своих проектов.

Чтобы ссылаться на словари в том же проекте, вы добавляете что-то подобное в ваш App.xaml (в этом случае я сохраняю свои ресурсы в папке ControlStyles).

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ControlStyles/Colors.xaml"/>
            <ResourceDictionary Source="ControlStyles/Window.xaml"/>
            <ResourceDictionary Source="ControlStyles/Button.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Если вы компилируете их в другую dll, вы можете использовать этот синтаксис (если dll стилей называется StyleAssembly, слово «компонент» фактически является частью синтаксиса, а не именем каталога):

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Colors.xaml"/>
            <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Window.xaml"/>
            <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Button.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
3 голосов
/ 16 июня 2010

@ Нир прав, единственное, что мне нравится делать, это заменить

 <ResourceDictionary Source="pack://application:,,,/StyleAssembly;component/ControlStyles/Colors.xaml"/>

с этим сокращением

 <ResourceDictionary Source="/StyleAssembly;component/ControlStyles/Colors.xaml"/>

Для меня это выглядит чище, и среда выполнения префиксует pack: // application: ,,, когда пытается найти ресурс.

0 голосов
/ 11 июня 2009

Вы хотите объединить словари ресурсов, как описано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...