2010-09-16 8 views
10

Rozważ plik | Nowy projekt aplikacji WPF, który zawiera:Dlaczego bezwzględne nazwy URI są wymagane w przypadku łączonych słowników w pliku Generic.xaml?

  1. nowy zwyczaj kontrola nazwie CustomControl1
  2. Dwa nowe słowniki zasobów nazwanych Dictionary1 i Dictionary2

Take wygenerowany styl z Generic.xaml i przenieść go do Dictionary2. Następnie połączyć Dictionary2 do Dictionary1 i Dictionary1 do Generic tak:

<!--Generic.xaml--> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="pack://application:,,,/Themes/Dictionary1.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

<!--Dictionary1.xaml--> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="Dictionary2.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

Następnie dodać instancję CustomControl1 do siatki MainWindow użytkownika. (Ta część jest niezbędna do odtworzenia problemu.Projekt zawsze kompiluje dobrze - tylko w czasie uruchamiania pojawia się problem, a słowniki muszą się odnosić.)

W Dictionary1.xaml Łączę się w innym dict w tym samym folder, więc działa proste źródło = "Dictionary2.xaml". Jednak w Generic.xaml muszę używać bezwzględnego URI. Jeśli zmienię powyższe na Source = "Dictionary1.xaml" bez pakietu: // stuff aplikacji, otrzymam wyjątek XamlParseException spowodowany przez wyjątek IOException "Can not locate resource" dictionary1.xaml '"podczas próby utworzenia MainWindow.

Moje pytanie:Co jest wyjątkowego w przypadku pliku generic.xaml dotyczącego względnej rozdzielczości URI i dlaczego?

Odpowiedz

0

Po prostu zgadnij: generic.xaml musi być dostępny także z zewn ± trz zewn ± trznych, więc jest to sposób na zapewnienie, że zasoby można znaleźć z dowolnego miejsca, używając bezwzględnych identyfikatorów URI. Jak już powiedziałem, to tylko ukłucie w ciemności, nie jestem pewien.

10

Przepraszam, ponieważ nie mam zdolności pisania komentarzy, więc zamieszczam to jako odpowiedź.

Mam taką samą sytuację i wszystko działa dobrze dla mnie. Nie muszę wstawiać "pack: // application" w ścieżce w pliku Generic.xaml. Ale tylko wtedy, gdy typem wyjściowym zespołu jest "Aplikacja systemu Windows". Dla "Biblioteka klas" Muszę dodać nazwę zespołu do ścieżki (Source="/ClassLibarayAssemblyName;component/Themes/Dictionary1.xaml") ponieważ bez niego silnik WPF próbuje wyszukać słownik Dictionary1.xaml w głównym zespole aplikacji.

Ramka docelowa w obu przypadkach to "Profil klienta .NET Framework 4"

Powiązane problemy