У меня есть две библиотеки классов, которые содержат некоторую часть презентации с использованием окон и пользовательских элементов управления. Допустим, это Presentation1 и Presentation2. У меня есть еще один CL, который является общим, и обе библиотеки презентаций ссылаются на него. В общей библиотеке я указал несколько пользовательских конвертеров. Я использую их в обеих презентациях, но в Presentation1 все работает нормально, но в Presentation2 те же конвертеры, которые видны во время разработки, но во время выполнения я получаю исключение:
'Предоставить значение для' System.Windows.StaticResourceExtension ', вызвавшего исключение.' Номер строки '55' и позиция строки '35'.
Если я перенесу любой из этих конвертеров в Presentation2 и укажу на них из себя, тогда они будут работать.
Любые предложения, пожалуйста, что может быть не так? Заранее спасибо.
Обновление:
Моя презентация2 xaml:
<UserControl x:Class="MyProject.PresentationCL2.Presentation.IssuedView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Converters="clr-namespace:MyProject.Common.Presentation.Converters;assembly=MyProject.Common">
<UserControl.Resources>
<ResourceDictionary>
<Converters:IntToStringConverter x:Key="IntToStringConverter" />
</ResourceDictionary>
</UserControl.Resources>
...
<ComboBox Margin="0, 10"
Grid.Row="1" Grid.Column="1"
ItemsSource="{Binding Path=SomeCollection}"
SelectedItem="{Binding Path=SomeCollectionSelectedValue, Converter={StaticResource IntToStringConverter}, Mode=TwoWay}"
/>
...
</UserControl>
Presentation1 xaml выглядит идентично, но работает нормально. Presentation2 создает исключение в той строке, на которую ссылается Converter из StaticResources.
Также стоит отметить, что когда я переместил этот IntToStringConverter в мою библиотеку Presentation2 (и он начинает работать должным образом, как в Presentation1), внутри его кода я использую несколько классов, на которые ссылается одна и та же Общая сборка, и он также работает.
Update2:
Я пытался обработать это исключение, используя DebugView, и результат представлен ниже:
[1] Сообщение об исключении: «Предоставить значение для« System.Windows.StaticResourceExtension », вызвавшее исключение.» Номер строки '48' и позиция строки '35'.
[2] Справка по исключению:
[3] Исключение Источник: PresentationFramework
[4] Исключение StackTrace: в System.Windows.Markup.XamlReader.RewrapException (Исключение e, IXamlLineInfo lineInfo, Uri baseUri)
[5] в System.Windows.Markup.WpfXamlLoader.Load (XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, логическое значение skipJournaledProperties, параметры объекта rootObject, параметры XamlObjectWriterSettings *, Uri baseUri 10)
[6] at System.Windows.Markup.WpfXamlLoader.LoadBaml (XamlReader xamlReader, логический skipJournaledProperties, объект rootObject, XamlAccessLevel accessLevel, Uri baseUri)
[7] at System.Windows.Markup.XamlReader.LoadBaml (Потоковый поток, ParserContext parserContext, родительский объект, логическое значение closeStream)
[8] at System.Windows.Application.LoadComponent (компонент объекта, Uri resourceLocator)
[9] в SettingsView.InitializeComponent () в .. \ Presentation2 \ Presentation \ presentation \ SettingsView.xaml: строка 1
[10] в SettingsView..ctor (TobiiEyeTrackingSettingsViewModel viewModel) в .. \ Presentation \ SettingsView.xaml.cs: строка 14
[11] at Presentation2.MainClass.ShowSetupDialog (Object varHwndParent) в .. \ Presentation2 \ MainClass.cs: строка 171
[12] InnerExceptionMessage: метод или операция не реализованы.
[13] InnerExceptionStackTrace: в System.Windows.Baml2006.Baml2006SchemaContext.ResolveBamlType (BamlType bamlType, Int16 typeId)
[14] в System.Windows.Baml2006.Baml2006SchemaContext.GetXamlType (Int16 typeId)
[15] в System.Windows.Baml2006.Baml2006Reader.Process_ElementStart ()
[16] в System.Windows.Baml2006.Baml2006Reader.ReadObject (запись KeyRecord)
[17] в System.Windows.ResourceDictionary.CreateObject (ключ KeyRecord)
[18] at System.Windows.ResourceDictionary.RealizeDeferContent (ключ объекта, объект и значение, логическое значение и canCache)
[19] at System.Windows.ResourceDictionary.GetValueWithoutLock (Object key, Boolean & canCache)
[20] at System.Windows.ResourceDictionary.GetValue (Object key, Boolean & canCache)
[21] at System.Windows.ResourceDictionary.Lookup (ключ объекта, логический allowDeferredResourceReference, логический mustReturnDeferredResourceReference)
[22] at System.Windows.StaticResourceExtension.FindResourceInEnviroment (IServiceProvider serviceProvider, логическое allowDeferredReference, логическое mustReturnDeferredResourceReference)
[23] at System.Windows.StaticResourceExtension.TryProvideValueInternal (IServiceProvider serviceProvider, логическое allowDeferredReference, логическое mustReturnDeferredResourceReference)
[24] at System.Windows.StaticResourceExtension.ProvideValueInternal (IServiceProvider serviceProvider, логическое allowDeferredReference)
[25] в System.Windows.StaticResourceExtension.ProvideValue (IServiceProvider serviceProvider)
[26] at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue (MarkupExtension me, IServiceProvider serviceProvider)
Стоит добавить, что MainClass, упомянутый в строке 11, - это класс ComVisible, зарегистрированный в системе и реализовавший специальный интерфейс (скажем, ICOMInterface), где:
[Guid("... guid here ...")]
[ComVisible(true)]
public class MainClass : ICOMInterface
{
...
public void ShowSetupDialog(object varHwndParent)
{
SettingsView view = new SettingsView();
view.ShowDialog();
}
...
}
Если я не буду обрабатывать это исключение, то программа, вызывающая этот ShowSetupDialog через реализованный интерфейс, возвращает HRESULT 80131501, который является COR_E_SYSTEM, который является исключением SystemException в .Net