WPF Docking库的推荐?

36

我们正在实现一个应用程序,需要可停靠的窗口,类似于Visual Studio 2005/2008,但具有多个“停靠站点”,而不是VS的单一站点。是否有人推荐一个好的库来实现这个功能 - 无论是OSS还是商业软件?我知道Infragistics有一个,Divelement的SandDock和DevComponents的WPF-Dock,以及ActiPro的Docking& MDI产品都提供了相应的功能。在CodeProject上也有一个相关的库。有没有人使用过这些库?使用体验如何?如果你有其中之一的经验,请问它是否支持多个“停靠站点”?


5
顺便提一下,如果您对Visual Studio 2010团队如何实现停靠和其他方面感兴趣,可以在http://blogs.msdn.com/b/visualstudio/archive/2010/03/23/wpf-in-visual-studio-part-5-window-management.aspx找到一组很好的博客文章。 - Pat
@pat评论中的MSDN链接现在已经失效。这是来自互联网档案馆的版本:http://web.archive.org/web/20151025043559/http://blogs.msdn.com/b/visualstudio/archive/2010/03/23/wpf-in-visual-studio-part-5-window-management.aspx - antiduh
8个回答

39
Codeproject上的那个是AvalonDock - 我们使用它已经有半年多了,但我们离发布还很远,所以我们有灵活性。在最终选择AvalonDock之前,我们尝试过Infragistix、ActiPro、SandDock,可能还有其他一些。 尽管AvalonDock并不完全没有 bug(嗯,什么东西是完全没有 bug 的呢?),但没有重大 bug;它非常稳定、快速,并具备所有功能。它支持多个停靠站点。
这是一个开源项目,并且正在积极开发中,因此会发现和修复 bug。迄今为止是个不错的体验。

5
AvalonDock(以及所有其他停靠管理器)没有的一个特性是在容器中具有完全功能的ItemsSource属性。 也就是说,我希望能够在我的类中有一个可观察的集合,我可以将其绑定到DocumentPane或DockablePane的ItemsSource属性上,并且只要我拥有正确的DataTemplates,这些集合将被显示为文档或可停靠标签/窗口。 虽然ItemsSource属性存在,但是它的可用性非常有限-它只能包含DocumentContent或DockableContent对象,并且在使用ItemsSource时无法进行拖放操作。 - Alex_P
5
在我发表上述评论仅几个星期后,该功能已被添加到AvalonDoc中!现在有一个DocumentsSource属性,可以绑定到文档集合,而且它运作得非常完美。 - Alex_P
2
AvalonDock中对于绑定的真正支持是不存在的。ItemsSource只有在您提供DocumentContent / DockableContent集合时才起作用,但我发现这种耦合和/或额外工作令人昏昏欲睡,至少在我正在处理的项目中是如此。我尝试着将MVVM启用的修复程序与AvalonDock组合在一起(当然,某些功能非常难以转换,例如取消窗口停靠),但由于各种原因失败了,有时候我已经接近一个可行的解决方案。我发现AvalonDock在其当前状态下禁止使用最佳实践,并且不太建议使用它。 - Alex Paven
4
我有点担心这个库在过去两年中没有持续开发的情况。 - Seth
1
对我来说,它似乎已经死了。我的2.0版本由于无法解释的原因(失去alt键修饰符,失去页面导航)而退化,而且他们的任何论坛都没有回应。 - Dave Clemmer
显示剩余10条评论

10

我使用 ActiPro 库已经有几个月了,效果很好。该库支持多个停靠站点,支持非常出色,并提供一些其他控件(日期选择器等),这些控件在 WPF 中缺失。对我而言,花费150美元是值得的。它可以直接使用,毫无麻烦。

我们以前使用 Divelements 用于 WinForm 控件,但我们认为 Actipro 的支持更好,所以我们转向了 WPF。

以上仅为个人见解。


3
我强烈推荐ActiPro的Dock控件——它是一种极好的停靠解决方案(我们将其用于Prism应用程序)。我通常不喜欢第三方控件,但这套控件让人感觉像是来自微软。对象API既有逻辑性,又十分完整。我们还使用了ActiPro Ribbon控件,同样也是一个很棒的控件。强烈推荐! - Brad Leach
我将成为反对ActiPro的声音,停靠区的序列化并不完整,无法反序列化停靠在文档窗格中的工具栏,这真是太遗憾了。(编辑:抱歉,Bill的答案不应该被评为-1)。 - Florian Doyon
@Brad:您说过“我不能推荐ActiPro...”,但是您的内容似乎是“我推荐...”。能否请您纠正一下笔误? - newman
7
@miliu,Brads的说法是“我无法推荐ActiPro的Dock足够”,意思是他非常推荐这个产品,与“我无法告诉你我有多喜欢…”的说法相同。 - Brett Ryan
我也可以担保ActiPro[MDI](https://en.wikipedia.org/wiki/Multiple-document_interface)停靠库的可靠性。尽管对于我的需求来说有点昂贵,但它是一个非常稳定的解决方案。您可以在此页面底部查看应用程序的一些屏幕截图:https://github.com/delph-in/docs/wiki/AgreeTop - Glenn Slayden
显示剩余2条评论

8

不要忘记在GitHub上使用AvalonDock(WPF Toolkit的一部分)。我曾在其他地方看到它被提及。

最初我打算使用ActiPro库(主要是因为我已经在使用他们的功能区),但我可能会给AvalonDock一个机会,因为它是开源的。

有人对AvalonDock有任何反馈/评论吗?


除了这个问题(https://dev59.com/PHXYa4cB1Zd3GeqP2iCI),对于我来说,在各个方面都绝对是非常棒的。 - MasterMastic
1
或者这个问题:https://dev59.com/PHnZa4cB1Zd3GeqPnj-Q。 - Dave Clemmer

4

4

SandDock还可以。我们在项目的POC阶段使用了它。我发现他们的布局保存机制中存在一些严重的错误。它生成了XML,但是不能加载这个XML,它抛出了一个异常!我实际上阅读了所有生成的XML,并编写代码在每次生成后稍微修改了一下XML。它似乎不是一个经过深思熟虑的设计;我希望有一些常见的WPF基本类型。

Infragistics稍微好一些,但也有bug。事实上,如果你尝试在只安装了.Net 3.0而没有.Net 3.5的机器上运行它,它就不能正常工作。我有一个未解决的开发问题,不知道他们是否已经在修复这个问题。我也曾经遇到过几次窗口悬浮和拖动时崩溃的情况(怀疑与上述.Net 3.0/3.5问题有关)。我发现对这个控件进行样式设置相当不直观。


3

我尝试了这里列出的所有库,它们都存在某种程度的漏洞。虽然价格较高,但我建议使用Telerik和Infragistics。Nevron值得一提,因为他们的库是我见过最好的,但它只适用于WinForms。


我强烈推荐Telerik。当你有技术支持问题时,他们非常迅速地回应。 - Seth
我也推荐Telerik和Devexpress的控件。它们的控件似乎更好地设计和可扩展。使用Devexpress时,我最初对快速答案感到高兴,但由于他们代码不透明的黑盒子特性,它们始终需要问题。Telerik使我感觉像是在学习他们的东西如何工作,并且扩展东西并最终只会问关于错误或缺少功能的问题,而不是不断需要询问用法问题。 - Dirk Bester

3
一年后... AvalonDock 现在稳定且强大。 还有一个“ AvalonDock 包装器 ”,可以简化使用它的过程而不降低其功能。 请参见http://sofawpf.codeplex.com/

3
sofawpf 的链接消失了? - Markus Hütter
你是怎么决定“它很稳定”的?难道你从几千名开发者那里获得了3-5年的统计数据吗?当然不可能。 - Vincent

3

这个也提供免费的许可证密钥。 - user2544708

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