Ссылка на файл словаря внешних ресурсов xaml

У меня есть проект с несколькими классами (это проект dll). Я добавил файл xaml (назовем его styles.xaml), в котором объявил наиболее часто используемые стили.

У меня есть другой проект (давайте позвоним в prog), в другом решении, в котором я хотел бы использовать стили, написанные в styles.xaml.

Я попытался щелкнуть правой кнопкой мыши prog -> добавить существующий элемент, выбрал styles.xaml, написал весь соответствующий код, и это сработало.

Проблема в том, что он скопировал файл styles.xaml в каталог моего проекта prog (поэтому теперь у меня есть две копии одного и того же файла ресурсов). В отличие от обычного dlls обращения, он всегда будет искать его в этом каталоге и не копировать его снова, если он не существует.

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

Я также пытался добавить ресурс и выбрать этот файл - та же проблема.

Есть ли способ сделать это?


person Idanis    schedule 03.03.2015    source источник
comment
Да, есть... msdn.microsoft. com/en-us/library/aa350178%28v=vs.110%29.aspx   -  person Florian Schmidinger    schedule 03.03.2015
comment
Вы также можете выбрать пакет nuget для хранения ваших стилей.   -  person Florian Schmidinger    schedule 03.03.2015
comment
Я сделал это, но это работает, только если у меня есть файл xaml рядом со всеми файлами классов...   -  person Idanis    schedule 03.03.2015
comment
добавлен пример... упаковать ури нелегко для понимания... с этим тоже были большие проблемы   -  person Florian Schmidinger    schedule 03.03.2015
comment
msdn.microsoft.com/en-us/ library/aa970069%28v=vs.110%29.aspx довольно хорошо его покрывает   -  person Florian Schmidinger    schedule 03.03.2015


Ответы (1)


например у вас есть в styles.dll:

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush  x:Key="BlueColor" Color="Blue"/>
    <!-- Whatever Styles you need -->
</ResourceDictionary>

в BlueTheme.xaml

затем ссылайтесь на него с помощью:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://siteoforigin:,,,/styles;component/BlueTheme.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
person Florian Schmidinger    schedule 03.03.2015
comment
Я пробовал это, но это все еще не работает ... Обязательно ли, чтобы и dll, и приложение находились под одним и тем же решением визуальной студии? Я пытаюсь использовать файл xaml, который находится под dll внутри одного решения, внутри проекта, который является частью другого решения. Это возможно? - person Idanis; 04.03.2015
comment
@Idanis Вот почему пакеты nuget пригодятся ... вам нужно каким-то образом загрузить сборку, содержащую словарь ресурсов стилей (например, если вы получили ссылку на проект в решении ИЛИ если вы получили ссылку на пакет nuget, который имеет ресурс словарь) компилятор не может угадать, где находится сборка. Также посмотрите ссылку о том, как сделать правильный пакет uri... как я уже сказал, это не тривиально - person Florian Schmidinger; 04.03.2015
comment
@Idanis Ссылка на ссылку под вашим вопросом - person Florian Schmidinger; 04.03.2015