2009-06-10 8 views
5

Zaczynam opracowywać aplikację na komputery stacjonarne z wykorzystaniem WPF (.net 3.5 sp1, tylko z VS, nie mieszam jeszcze).XAML: Jak definiować szablony danych i style, które mają być używane w kilku projektach

Jestem w momencie, gdy mam kilka ogólnych składników wielokrotnego użytku w kilku bibliotekach.

Gdzie mogę zdefiniować szablony danych stylów &, aby można je było wykorzystać w kilku projektach, aby uzyskać spójny wygląd i styl?

Szukałem na ResourceDictionaries, ale jestem pewien, że

  1. Są co muszę
  2. Jeśli są co muszę, jak mogę „import” je do innego projektu i podaj ich zawartość w Xaml.

Dzięki

Odpowiedz

10

ResourceDictionary jest drogą do zrobienia, możesz skopiować plik xaml zawierający słownik zasobów pomiędzy projektami lub skompilować je do biblioteki DLL, z której będziesz korzystać w swoich projektach.

Aby odwołać się do słowników w tym samym projekcie, należy dodać coś takiego do pliku App.xaml (w tym przypadku moje zasoby znajdują się w folderze 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> 

Jeśli skompilować je w innym dll można użyć tej składni (jeżeli dll style nazywa StyleAssembly słowo „komponent” jest w rzeczywistości częścią składni, a nie nazwa katalogu):

<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> 
+0

Yer tylko Gwiazda, dzięki :) –

0

Chcesz słowniki zasobów połączone, jak opisano here.

3

@Nir ma rację, jedyną rzeczą, którą chcesz zrobić, jak dobrze jest zastąpić

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

ten skrót

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

Po prostu wygląda na czystsze, a środowisko wykonawcze będzie mieć prefiks pack: // application: ,,, kiedy spróbuje zlokalizować zasób.

Powiązane problemy