WPF-С#:Этот элемент в настоящее время не связан ни с каким контекстом
-
20-09-2019 - |
Вопрос
У меня есть пользовательский элемент управления WPF, который я использую в элементе управления WinForms внутри ElementHostControl.Затем я запускаю окно WPF, пока форма Windows все еще открыта.Если я затем закрою окно WPF и попытаюсь добавить дочерний элемент в свой пользовательский элемент управления WPF, он выйдет из строя при «InitializeComponent()» (дочернего элемента), за исключением:
«В System.Configuration.dll произошло первое случайное исключение типа System.Configuration.ConfigurationErrorsException.Дополнительная информация:Этот элемент в настоящее время не связан ни с каким контекстом"
Я выяснил, почему так происходит, но не знаю, как решить проблему.Если я оставлю этот код:
public static void EnsureApplicationResources()
{
if (Application.Current == null)
{
// create the Application object
new Application();
string assemblyName = System.IO.Path.GetFileNameWithoutExtension(
Assembly.GetExecutingAssembly().ManifestModule.Name);
// merge in your application resources
Application.Current.Resources.MergedDictionaries.Add(
Application.LoadComponent(new Uri("/KolonistenClient;component/KolonistenResourceDictionary.xaml", UriKind.RelativeOrAbsolute))
as ResourceDictionary);
}
}
то все в порядке.Однако мне это нужно, поскольку мой ResourceDictionary (а, следовательно, и мои определенные стили и шаблоны) в противном случае недоступен в окне и элементах управления WPF. Об этом я узнал здесь
Есть ли способ объединить лучшее из обоих миров?Сохранять мой ResourceDictionary и при этом предотвращать сбой приложения?
Решение
В конце концов я решил эту проблему, добавив ResourceDictionary в каждое окно вручную через xaml.Таким образом, UserControl в моих WinForms остается неизменным.
Еще не совсем понял почему но, к сожалению, он сломался.
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/KolonistenClient;component/KolonistenResourceDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>