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!
Haben Sie Elemente haben die gleichen Schlüsselnamen in beiden Wörterbücher verwenden? Oh und was ist in Zeile 19? –
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
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