Zaradni w osobnym zgromadzeniu

Mam pliki słownika zasobów (MenuTemplate.xaml, ButtonTemplate.xaml, etc), które chcę używać w wielu oddzielnych aplikacjach. Mógłbym dodać je do zestawów aplikacji, ale lepiej będzie, jeśli skompiluję te zasoby w jednym zestawie i moje aplikacje będą się do nich odwoływać, prawda?

Po zbudowaniu zestawu zasobów, jak mogę odwołać się do niego w aplikacji.xaml moich aplikacji? Obecnie używam ResourceDictionary.Scalone w celu scalenia jednostki pliki słownikowe. Jeśli mam je w zestawie, Jak mogę je odwołać w xaml?

Author: CharithJ, 2008-12-03

6 answers

Sprawdź składnię pack URI . Chcesz coś takiego:

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
 325
Author: Kent Boogaart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-27 14:52:27

Przykład, żeby to była 15-sekundowa odpowiedź -

Powiedz, że masz " style.xaml "w bibliotece WPF o nazwie "common" i chcesz go użyć z głównego projektu aplikacji:

  1. Dodaj odniesienie z głównego projektu do" wspólnego " projektu
  2. Twoja aplikacja.xaml powinien zawierać:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Cheers

 90
Author: Hertzel Guinness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-27 11:55:10

Pracuję z. NET 4.5 i nie mogłem tego uruchomić... Używałem WPF Custom Control Library. W końcu mi się udało...

<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />

Źródło: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19

 33
Author: Aleksandar Toplek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-17 12:17:13

Resource-Only DLL jest opcją dla Ciebie. Ale nie jest to konieczne, chyba że chcesz modyfikować zasoby bez rekompilacji aplikacji. Mieć tylko jeden wspólny ResourceDictionary plik jest również opcja. To zależy jak często zmieniasz zasoby itp.

<ResourceDictionary Source="pack://application:,,,/
     <MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>

MyAssembly - tylko nazwa złożenia bez rozszerzenia

FolderStructureInAssembly - jeśli zasoby znajdują się w folderze, określ strukturę folderów

Kiedy to robisz to lepiej być świadomym siteOfOrigin też.

WPF wspiera dwa organy: application: / / / oraz siteoforigin:///. Aplikacji: / / / Organ identyfikuje pliki danych aplikacji, które są znane w czasie kompilacji, w tym pliki zasobów i treści. Na siteoforigin: / / / Organ identyfikuje pliki strony pochodzenia. Zakres każdego organu przedstawiono na poniższym rysunku.

Tutaj wpisz opis obrazka

 16
Author: CharithJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-30 01:37:00

Dla UWP:

<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />
 5
Author: Gianluca Demarinis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-27 10:48:06

Korzystanie z XAML:

Jeśli znasz drugą strukturę assembly i chcesz resources W c# kod, następnie użyj poniższego kodu:

 ResourceDictionary dictionary = new ResourceDictionary();
 dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute);
 foreach (var item in dictionary.Values)
 {
    //operations
 }

Wyjście: jeśli chcemy użyć ResourceDictionary RD1.xaml projektu WpfControlLibrary1 na projekt StackOverflowApp.

Struktura projektów :

Struktura projektów

Słownik Zasobów: Słownik Zasobów

Kod Wyjście:

Wyjście

PS: wszystkie Pliki ResourceDictionary powinny mieć Build Action jako 'Resource ' lub ' Page'.

Korzystanie Z C#:

Jeśli ktoś chce rozwiązania w czysto kod c# zobacz moje to rozwiązanie.

 4
Author: Kylo Ren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:10