2016-09-14 4 views
0

Ich habe eine ähnliche Situation zu this Frage. Diese Benutzer stellen jedoch fest, wie Plug-Ins die statischen Ressourcen der Host-Anwendung zur Laufzeit nutzen können. Das ist mein Stolperstein.WPF-Anwendung Plugin mit Ressourcen von der Host-Anwendung

Rufen wir den Host "K". Im Moment habe ich ein Resource-Dictionary namens KResources.xaml erstellt, in dem alle Ressourcen der Anwendung gehalten werden (app.xaml fügt dieses Dictionary einfach zusammen und nennt es einen Tag).

In meinem Plugin erstelle ich eine Ansicht, V, die das KResources-Wörterbuch verwenden muss. Dies ist, was ich zur Zeit versucht:

<UserControl.Resources> 
<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/K;component/Resources/KResources.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 
</UserControl.Resources> 

Ive auch die folgende Syntax versucht:

<ResourceDictionary 
    Source="pack://application:,,,/K;component/Resources/KResources.xaml" /> 

Compilation gut geht und meine V.xaml Datei erkennt die Ressourcen, aber ich erhalte eine Ausnahme zur Laufzeit wenn diese Ansicht erstellt:

System.Windows.Markup.XamlParseException occurred 
HResult=-2146233087 
LineNumber=19 
LinePosition=8 
Message='The invocation of the constructor on type 'K.UI.Infrastructure.CaliburnBootstrapper' that matches the specified binding constraints threw an exception.' Line number '19' and line position '8'. 
Source=PresentationFramework 
StackTrace: 
    at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) 
InnerException: 
    HResult=-2147024809 
    Message=An item with the same key has already been added. 
    Source=mscorlib 
    StackTrace: 
     at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) 
     at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) 
     at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) 
     at Caliburn.Micro.AssemblySourceCache.<Install>b__4(Type t) 
     at Caliburn.Micro.EnumerableExtensions.Apply[T](IEnumerable`1 enumerable, Action`1 action) 
     at Caliburn.Micro.AssemblySourceCache.<Install>b__0(Object s, NotifyCollectionChangedEventArgs e) 
     at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e) 
     at Caliburn.Micro.BindableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e) 
     at Caliburn.Micro.BindableCollection`1.<>c__DisplayClasse.<AddRange>b__d() 
     at Caliburn.Micro.XamlPlatformProvider.OnUIThread(Action action) 
     at Caliburn.Micro.BindableCollection`1.AddRange(IEnumerable`1 items) 
     at Caliburn.Micro.BootstrapperBase.StartRuntime() 
     at Caliburn.Micro.BootstrapperBase.Initialize() 
     at K.UI.Infrastructure.CaliburnBootstrapper..ctor() in C:\Dev\K\source\K.UI\Infrastructure\CaliburnBootstrapper.cs:line 44 

die Linie message = Ein Element mit demselben Schlüssel wurde bereits hinzugefügt. fällt auf.

Jeder Einblick würde sehr geschätzt werden. Danke im Voraus!

+0

Haben Sie Elemente haben die gleichen Schlüsselnamen in beiden Wörterbücher verwenden? Oh und was ist in Zeile 19? –

+0

Ich denke, Zeile 19 bezieht sich auf eine Zeile innerhalb der WpfXamlLoader-Klasse. Referenz: http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Markup/WpfXamlLoader.cs Ich mache eine schnelle Überprüfung meines Projekts für Schlüssel mit dem gleichen Namen definiert. Danke für den Vorschlag! Ich werde zurückkommen, wenn ich fertig bin. – 780farva

+0

OK Ich habe die Lösung so gründlich durchgekämmt, wie ich es für möglich halte (shoutout zu Notepad ++ und regexr.com für rad). Ich fand ein paar doppelte Schlüssel, aber sie waren so begrenzt, dass sie nicht kollidieren sollten. Ich habe die Namensvervielfältigung irgendwie entfernt, kämpfe aber immer noch zur Laufzeit um die gleiche, nicht hilfreiche Ausnahme. – 780farva

Antwort

0

Es stellt sich also heraus, dass das Auslassen des Merged-Dictionary-Codes insgesamt dazu führte, dass die statischen Ressourcen, die ich benötigte, zur Laufzeit trotzdem richtig lokalisiert wurden. Der Nachteil ist, dass die IDE sie während der Entwurfszeit so hervorhebt, als ob sie nicht existieren würden.

an der gleichen Stelle wie diese Frage Dies läßt mich: https://stackoverflow.com/questions/29749256/static-resources-in-wpf-in-pluggable-application

Verwandte Themen