У меня такая же ситуация, как и вопрос this. Тем не менее, пользователи просматривают, как они могли иметь плагины использовать статические ресурсы из хост-приложения во время выполнения. Это мой камень преткновения.Плагин приложения WPF с использованием ресурсов из принимающего приложения
Позволяет вызвать хост "K". На данный момент я создал ресурсный словарь под названием KResources.xaml, где хранятся все ресурсы приложения (app.xaml просто объединяет этот словарь и называет его днем).
В моем плагине я создаю представление V, которое должно использовать словарь KResources. Это то, что я в настоящее время пытаюсь:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/K;component/Resources/KResources.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
Ive также попытался следующий синтаксис:
<ResourceDictionary
Source="pack://application:,,,/K;component/Resources/KResources.xaml" />
компиляция идет хорошо, и мой файл V.xaml распознает ресурсы, но я получаю исключение во время выполнения когда создается этот вид:
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
линия Сообщение = элемент с тем же ключом уже был добавлен. выделяется.
Любое понимание было бы весьма полезным. Заранее спасибо!
У Вас есть элементы, используя один и тот же ключ имя в обоих словарях? О, и что на линии 19? –
Я думаю, строка 19 относится к строке внутри класса WpfXamlLoader. Ссылка: http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Markup/WpfXamlLoader.cs Я сделаю быстрый аудит моего проекта для ключей, определенных с тем же именем. Спасибо за предложение! Я прокомментирую, когда закончу. – 780farva
OK Я прочел решение так тщательно, как мне кажется, (крикнуть Notepad ++ и regexr.com за то, что он рад). Я нашел пару дубликатов ключей, но они были охвачены так, что они не должны были сталкиваться. В любом случае я удалил дублирование имен, но я все еще борюсь с тем же самым, бесполезным исключением во время выполнения. – 780farva