2012-05-01 2 views
3

Мне не удалось выполнить эту работу из-за того, что я считаю ошибкой в ​​Visual Studio, поэтому я был бы очень признателен, если бы кто-то мог попробовать эту ситуацию и поделиться тем, что случается.C++ Parenting WPF-окно из другой сборки и обработки событий

Я имею установку в растворе 2 проекта: - приложение C++, который был включен CLI (.exe) - это C#/библиотека классов WPF, который имеет .xaml форму внутри с соответствующим .cs класса окна (.dll)

Я хочу создать окно WPF внутри моего приложения на C++, поэтому я импортирую его ссылку и создаю новый экземпляр окна и запускаю его в новом контексте приложения. То работает отлично.

Теперь я хочу сделать классы из этого окна и обработать различные события, унаследованные от защищенных функций в окне C#, поэтому на сборке C++ сделать общедоступным класс ref, чей дочерний элемент является классом .cs окна с окном .xaml , Это прекрасно компилируется.

т.е.

public ref class myCPPWindow : myWPFWindow { ... }; 

Я тогда изменить окно я нерест на родительский класс, который находится в C++ сборка, а не базового класса, расположенный в C# сборки. Теперь я получаю сообщение об ошибке в части InitializeComponent() базового класса C# при загрузке окна .xaml, которое мне нужно сказать, что он не может загрузить источник окна .xaml из сборки C#, даже если базовый класс работает. Может ли кто-нибудь дать объяснение/исправить это?

+0

Все еще ищете ответ/совет – kvanberendonck

+0

Посмотрите на myWPFWindow.xaml.cs и проверьте, какой ресурс загружен и как это делается. Возможно, это поможет вам. –

+0

Загружается с использованием InitializeComponent(). Ничего особенного не делается. Я попытался переместить InitializeComponent в дочерний элемент вместо родителя, и не имеет никакого значения в случае отказа найти форму с относительным URI внутри InitializeComponent(). – kvanberendonck

ответ

1

Это выглядит как обычная проблема [библиотека; управление пользователями] - [приложение; производный контроль] в WPF - я воспроизвел это даже без C++. Не вникая в объяснение, общее обходное решение представляет собой либо агрегатный «базовый» класс, либо базовый класс для деградации, который должен быть шаблонизированным, а не пользовательским (например, без .xaml-файла). Если я правильно понял, ваш вопрос совпадает с вопросом The component does not have a resource identified by the uri.

+0

Не знаете как, но если есть возможность указать связь между вопросами, это было бы полезно. – mikalai

Смежные вопросы