C++/CLI,XAML和事件处理程序

Pol*_*lly 8 wpf xaml c++-cli event-handling

我是Windows世界的新手,我想我在杂草中迷失了问题.我喜欢有C++/CLI和WPF以及XAML经验的人的一些建议.

我有一些win32代码,我需要运行WPF GUI.我找到了这个使用C++/CLI的MS演练示例.我根据自己的目的调整了它,效果很好.

接下来,我想要删除程序化的WPF内容并改用XAML.这样我就可以将XAML交给设计人员,让自己脱离UI设计循环,我绝对不属于他.在MSDN上阅读WPF和Win32 Interoperation的"WPF互操作项目"部分之后,我决定使用该XamlReader::Load选项并在运行时加载未编译的XAML.我的XAML标记是Canvas UIElement我以编程方式添加为我的根GridC++/CLI元素的子项.这非常有效.

现在我想在XAML中为控件添加事件处理程序.这是我开始遇到麻烦的地方.我确信我对Windows世界的普遍无知是在这里杀死我的95%.

我从Rob Relyea的页面开始,概述了各种XAML和事件处理程序选项.

我决定尝试将XAML编译为C#DLL.它与我在运行时Load Case中使用的XAML基本相同.我实例化对象并以编程方式添加为子项,就像之前一样.但是......我什么都没有,只有一个黑色的窗户.也没有异常被抛出.我很困惑.

我的问题是,我是否走上了正确的道路?XAML和事件处理程序上的页面说你可以使用.Net Framework 4中未编译的XAML中定义的事件处理程序.我应该咬紧牙关然后去VS 2010(我目前在VS 2008上)所以我可以使用.Net Framework 4并坚持使用未编译的XAML?这样做是否有任何陷阱?

或者,如果你认为编译的C#DLL是一个合理的路径,你对我如何调试我遇到的问题有任何想法吗?

或者,有更好的和完全不同的方法吗?

提前感谢您的建议.

波莉

jda*_*lva 3

我认为这个问题的正确答案取决于一些只有您可以决定的问题,但我首先假设您的 C++ 代码库足够大且复杂,值得保留。

除此之外,下一个决策点是您保留的 C++ 中是否有 UI(可能是 GDI)代码,还是只有非 UI 代码。如果您试图仅保留非 UI 代码,那么我会考虑将更多 UI 责任推入 C# 中。也许您甚至用 C# 构建视图、事件处理程序,甚至视图模型。这将使您能够更好地利用 VS 工具。

如果您有大量的 C++ UI 代码需要保留,那么您当前的路径更有意义。我不认为这是不可能的,但你将面临很大的挑战。这里的关键示例是 Visual Studio 2010。它是混合应用程序的首屈一指的示例,并且并排有 GDI 和 WPF,这与我见过或听说过的任何其他应用程序不同。我发现Visual Studio 博客上有一系列非常有趣的博客文章,描述了 Visual Studio 团队为实现此集成所做的某些方面。

我还看到了Henry Sowizral 的关于在 Expression Design 中使用 WPF 重新面对 C++ 的视频,我自己没有看过该视频,但讨论了如何将 WPF UI 置于现有的 MFC C++ 应用程序之上。

祝你好运。

对于您问题的第一部分,我没有任何具体建议,只是说,在 C# 中承担更多责任将允许您在必要时构建一个小型存根应用程序,这对诊断问题大有帮助。