如何在 Excel 操作窗格中使用 WPF 控件?

3

有很多资源可以解释如何在Excel中添加WinForms控件。请参考以下两个链接:

http://msdn.microsoft.com/en-us/library/vstudio/e3zbk0hz%28v=vs.100%29.aspx

http://www.clear-lines.com/blog/post/create-excel-2007-vsto-add-in-wpf-control.aspx

两个资源都提到了使用更为现代的WPF控件(我需要的那种)。不幸的是,这两个资源都缺少一个基本部分。有一个缺失的链接:

(1) 微软网站提到了一些视频 - 标题与我要求的完全匹配 - 但似乎该网站上的所有视频都已被删除。

enter image description here

(2)Clear-Lines网站包含一个杰出的、逐步实施的项目,但遗憾的是,当提到关键部分时,作者使用了一些在VS-2010+中不存在的工具(“Toolbox”的“WPF互操作性部分”)。

enter image description here

根据以上截图和其他网站,我得出结论,缺失的链接,即我的WPF UserControl与其在Excel中的外观之间的连接是一些ElementHost

对于@HighCore的补充。请参见下面的工具箱:

enter image description here


1
作为一名 WPF 程序员,我也尝试在 VSTO 应用程序中使用 WPF 控件,但迄今为止,我不得不使用较差的 WinForms 方法,因为它有文档支持。 - Travis Banger
1
VSTO应用程序与WPF非常兼容。我目前正在重构一个Win Form应用程序,用于Excel,该应用程序使用浏览器从Web服务获取自定义HTML,并将其转换为WPF应用程序。对我来说最重要的是学习如何在不使用WPF应用程序的情况下操纵WPF以出现在屏幕上。为了解决这个问题,我从这里开始:http://www.c-sharpcorner.com/UploadFile/yougerthen/integrate-wpf-control-in-your-excel-solutions/,这导致了我当前的架构。一个WPF控件和窗口库以及一个Excel插件项目。引用其他应用程序,一切都很顺利。 - Anthony Mason
2个回答

2
尊敬的用户:
您遇到的问题是,您正在尝试将一个WPF控件放置在另一个WPF控件中。
您需要创建一个老式的WinForm控件,然后使用工具箱,如下图所示: enter image description here 请注意,部分ElementHost任务已更名为WPF互操作性,但它仍然非常活跃。
来自MSDN杂志: http://msdn.microsoft.com/en-us/magazine/cc163292.aspx#S4 enter image description here

0

我不确定你为什么认为有一个“缺失的链接”。ElementHost是在winforms上托管WPF内容的标准方式,它在上面的链接和这里中都有完整的文档。

对于任何winforms容器(例如FormPanel),只需执行以下操作:

var elementHost = new ElementHost 
                  {
                      Child = new YourWPFContentHere()
                  };

this.Controls.Add(elementHost);

请确保您添加了这些程序集的引用:

  • PresentationCore

  • PresentationFramework

  • System.Xaml

  • WindowsBase

  • WindowsFormsIntegration


2
我想我当时是在寻找一个纯WPF的解决方案。顺便说一句:视频和“工具箱中的WPF互操作性部分”都确实缺失了。 - user3550325
1
工具箱 = Visual Studio 中的 Ctrl-Alt-X。 - user3550325
1
HighCore:你有使用VSTO的经验吗?真的很难找到关于它的好信息(比如这篇帖子的主题)。 - user3550325
1
好的 - 你让我想起了一个同事,他以小说家打英语的速度打HTML。那是在可视化HTML工具推出之前。我正在慢慢学习XAML,之前一直被它吓到。会尝试你的建议。 - user3550325
1
"Visual Studio 设计器为 XAML 标签生成了许多不必要、难以维护的属性。就像电脑在我们犯错时监视我们一样,我们有责任监视 Visual Studio 生成的最佳代码。这样的代码注定会变得越来越好(不像人类智慧 :-()" - user3550325
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接