【问题标题】:C++ Parenting a WPF window from another assembly and handling eventsC++ 为另一个程序集创建一个 WPF 窗口并处理事件
【发布时间】:2012-05-10 17:18:39
【问题描述】:

我一直无法完成这项工作,因为我认为这是 Visual Studio 中的一个小故障,所以如果有人能尝试这种情况并分享发生的情况,我将不胜感激。

我已在解决方案 2 项目中设置: - 已启用 CLI 的 C++ 应用程序 (.exe) - 一个 C#/WPF 类库,其内部有一个 .xaml 表单和一个匹配的 .cs 窗口类 (.dll)

我想在我的 C++ 应用程序中生成 WPF 窗口,因此我导入它的引用并创建窗口的新实例并在新的应用程序上下文下运行。效果很好。

我现在想在这个窗口之外创建类并处理从 C# 窗口中的受保护函数继承的不同事件,因此在 C++ 程序集中创建一个公共 ref 类,其子类是 .xaml 驱动窗口的 .cs 类。这编译得很好。

即:

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

然后,我将生成的窗口更改为位于 C++ 程序集中的父类,而不是位于 C# 程序集中的基类。现在,在加载 .xaml 窗口时,我在基 C# 类的 InitializeComponent() 部分收到错误,我需要说明它无法从 C# 程序集中加载 .xaml 窗口源,即使基类工作。任何人都可以对此给出解释/修复吗?

【问题讨论】:

  • 仍在寻找答案/建议
  • 查看 myWPFWindow.xaml.cs 并检查加载了哪些资源以及它是如何完成的。也许这对你有帮助。
  • 使用 InitializeComponent() 正常加载。没有什么特别的事情正在做。我尝试将 InitializeComponent 移动到子级而不是父级,并且在 InitializeComponent() 中使用相对 URI 定位表单的失败没有任何区别。
  • 程序集是否包含在 URI 中?
  • 是的,这样做会产生“不支持绝对 URI”错误。

标签: c# c++ .net wpf


【解决方案1】:

它看起来像是 WPF 中常见的 [库;用户控件]-[应用程序;派生控件] 问题——即使没有 C++,我也重现了该问题。在不深入解释的情况下,一般的解决方法是聚合“基”类或将基类重新设计为模板控件而不是用户控件(例如,没有 .xaml 文件)。如果我理解正确,您的问题与The component does not have a resource identified by the uri 问题相同。

【讨论】:

  • 不确定如何,但如果有可能指出问题之间的联系,那将很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 2013-03-04
相关资源
最近更新 更多