2016-09-14 8 views
0

У меня такая же ситуация, как и вопрос 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 

линия Сообщение = элемент с тем же ключом уже был добавлен. выделяется.

Любое понимание было бы весьма полезным. Заранее спасибо!

+0

У Вас есть элементы, используя один и тот же ключ имя в обоих словарях? О, и что на линии 19? –

+0

Я думаю, строка 19 относится к строке внутри класса WpfXamlLoader. Ссылка: http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Markup/WpfXamlLoader.cs Я сделаю быстрый аудит моего проекта для ключей, определенных с тем же именем. Спасибо за предложение! Я прокомментирую, когда закончу. – 780farva

+0

OK Я прочел решение так тщательно, как мне кажется, (крикнуть Notepad ++ и regexr.com за то, что он рад). Я нашел пару дубликатов ключей, но они были охвачены так, что они не должны были сталкиваться. В любом случае я удалил дублирование имен, но я все еще борюсь с тем же самым, бесполезным исключением во время выполнения. – 780farva

ответ

0

Таким образом, оказывается, что опускание словаря объединенного словаря в целом привел к тому, что статические ресурсы, которые мне необходимы, были правильно установлены во время выполнения. Недостатком является то, что во время разработки IDE выделяет их так, как будто их не существует.

Это оставляет меня в той же точке, что и этот вопрос: https://stackoverflow.com/questions/29749256/static-resources-in-wpf-in-pluggable-application