Препратка към файл с речник на външни 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
добавен пример... pack uris не са лесни за разбиране... имах големи проблеми и с това   -  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