如何在WPF中轻松绘制图形?
我需要绘制代表有限状态机的图表。 我尝试使用Graph# 。 这很酷,但缺少一些东西。 没有文档,这使得它很难使用,我不能使用其自定义WPF控件绘制循环(从顶点到自身的边),并且标签边也没有实现。 在WPF中是否有任何其他库提供了绘制图形的方法?
我需要的function:
- 边缘标签
- 循环(循环)边
- 顶点标记
- 在顶点周围绘制单/双圆 – 顶点应表示为圆形(或双圆),内部带有标签
有任何想法吗?
编辑:我有一些主张,我很感激。 但是,我想我没有弄清楚我的想法。 我需要这种图表: http : //static.max99x.com/school/automata-editor1.png 。 到目前为止建议的所有工具都不适合这种情况,或者我不知道在这种情况下如何应用它们。
选项1:Microsoft自动图形布局
自由
http://research.microsoft.com/en-us/projects/msagl/
GitHub上
https://github.com/Microsoft/automatic-graph-layout.git
Winforms >> WPF
它是WinForms,但它可以通过几行代码导入到WPF中。
使用Microsoft自动图形布局可视化节点和边缘
例子
http://research.microsoft.com/en-us/projects/msagl/#Layouts
常问问题
http://research.microsoft.com/en-us/projects/msagl/faq.aspx
选项2:QuickGraph – 具有Graphviz支持的100%C#图库
自由
http://quickgraph.codeplex.com/
这个库是100%C#。 不要被“Graphviz支持”这一行误导,这意味着它使用C#代码从Graphviz导入输出。 看不到C ++代码。
http://www.codeproject.com/Articles/5603/QuickGraph-AC-graph-library-with-Graphviz-Sup
有一个NuGet包。
正在开发2003年至2011年(8年!!)。
选项3:GraphSharp
自由
http://graphsharp.codeplex.com/
- 取决于QuickGraph(100%C#)。
- 支持async / await(很好!)。
演示
https://sachabarbs.wordpress.com/2010/08/31/pretty-cool-graphs-in-wpf/
笔记
这个工作非常好,在几个小时内启动并运行。 它还支持DataTemplates
,因此每个节点都可以拥有您想要的任何外观。
选项4:Graphviz4net
自由
http://graphviz4net.codeplex.com/
选项5:GoDiagram
$$$
http://www.nwoods.com/products/godiagram/index.html
选项6:WPF的图树绘制控件
自由
http://www.codeproject.com/Articles/29518/A-Graph-Tree-Drawing-Control-for-WPF
不合适。 这是树的布局。
选项7:使用WPF可视化具有循环依赖关系的图形
自由
http://www.codeproject.com/Articles/43776/Using-WPF-to-Visualize-a-Graph-with-Circular-Depen
选项8:GraphViz
自由
http://www.graphviz.org/Download..php
这不是C#,并使用非托管代码。 但是,它有C#包装器。
由AT&T开源,参见“AT&T研究人员 – 发明服务背后的科学”,以及“研究之家>产品组合>软件工具”: http : //www.research.att.com/software_tools? fbid = NEW8_gxLLEc
资源
http://www.graphviz.org/Download_source.php
他们还开源Rserve!
选项9:Shields.GraphViz
自由
GraphViz的包装器。
https://github.com/timothy-shields/graphviz
选项10:NetworkView:用于可视化和编辑网络,图形和流程图的WPF自定义控件
自由
http://www.codeproject.com/Articles/182683/NetworkView-A-WPF-custom-control-for-visualizing-a
该库允许用户在节点之间创建连接,这可能有点过分。
例
这都是MVVM。
选项11:Gephi – Open Graph Viz平台
自由
见http://gephi.github.io/
不是WPF图形库,而是提供了非常好的图形外观的很好的例子。 该教程非常好。
选项12:Telerik
$$$
http://www.telerik.com/products/wpf/diagrams.aspx
选项13:Infragistics
$$$
http://www.infragistics.com/samples/wpf/network-node/overview http://www.infragistics.com/samples/wpf/network-node/relationship-between-nodes http://www.infragistics。 COM /样品/ WPF /网络节点/自定义节点式
选项14:WPF图设计器
自由
与图形工具不同,它确实向您展示了如何在canvas上移动,resize和旋转任何类型的对象。
http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1
选项15:MVVM图设计器
自由
并且,有人在MVVM中重新实现了这一点:与图形工具不同,它确实向您展示了如何在canvas上移动,resize和旋转任何类型的对象。
http://www.codeproject.com/Articles/484616/MVVM-Diagram-Designer
选项16:yWorks – Diagramming公司
$$$
https://www.yworks.com/en/products_yfiles_practicalinfo_gallery.html https://www.yworks.com/en/products_yfileswpf_about.html
选项17:MindFusion
$$$
http://www.mindfusion.eu/features-wpfdiagram.html http://www.mindfusion.eu/
选项18:Dot2WPF
自由
用于查看DOT图的WPF控件。
http://www.codeproject.com/Articles/18870/Dot-WPF-a-WPF-control-for-viewing-Dot-graphs
选项19:SyncFusion
$$$
https://www.syncfusion.com/products/wpf/diagram
选项20:AddFlow
$$$
https://www.componentsource.com/product/addflow-wpf-standard
选项21:Lassalle
$$$
选项22:动态数据显示
http://dynamicdatadisplay.codeplex.com/
选项23:Nevron
$$$
仅适用于WinForms,但可以导入到WPF中。 但是,每个单独的项目都不能模板化,这是WPF解决方案的一大优势。
Google搜索字词
- “工作流程wpf图形”
- “wpf图形库”
- “wpf状态机库”
Graphviz + GraphViz C#Wrapper正是我想要的。
我认为您可以使用GraphX库为WPF轻松实现所有需求。 它基于Graph#并具有详细的文档。 http://panthernet.ru/en/projects-en/graphx-en
它支持边缘标记和自循环边以及边和顶点模板。 如果您有任何疑问,可以在网站的“讨论”部分询问。
在关于二分图的类似问题中,您可以在此处阅读,我在NetworkView上获得了建议
它具有循环,顶点标注,自定义顶点可视化,您可以轻松编辑为圆形。 但是,认为它没有边缘标签。 试一试吧。
如果您决定自己做,至少这是一个非常好的开始。
您可能希望查看Codeproject文章“使用循环依赖项可视化图形”
如果这是商业场景,您还应该看看yWorks的yFiles 。
它具有您正在寻找的所有function,其最突出的特点是能够自动排列图表。 如果你有一个更大的状态机甚至在代码中创建状态机,这将帮助你自动清楚地安排大型图表。 此外,对于标签,还有自动标签放置算法,可以找到标签的放置位置,使它们不会相互重叠或与其他不相关的元素重叠。
您可以在此Youtubevideo中看到该库的实时操作,但您也可以立即在线播放Silverlight现场演示,或者只是评估库并使用示例源。
免责声明:我在yWorks工作,但在此我不代表我的雇主。
以下是一些选项:
- 的Visifire
- Silverlight图表控件在WPF上运行
- WPF工具包
- Telerik的
我希望你找到你需要的东西。 花钱的人也可以免费试用。 使用telerik或visifire可以获得一些非常好的结果!