3

嗨,我是 C# WPF 的新手。C#中有一个流程图WPF程序。该程序可以显示对象和它们之间的连接箭头。即例如

========           ========
|      |           |      |
| obj1 |  ------>  | obj2 |
========           ========

1 - 右键单击​​每个对象时如何为每个对象添加视觉功能?即,当我用鼠标右键单击一个对象时,我希望能够更改它属于应用程序的属性。

2 - 如何创建和生成包含上述对象的关系信息的文件。即 obj1 流向 obj2

感谢您分享您的想法

4

4 回答 4

3

1) 您需要编写在鼠标单击事件中使用的命中测试代码。您需要检查每个对象的屏幕位置,以确定单击鼠标时哪些对象(如果有)位于指针“下方”。从那里您可以为您想要实现的功能显示适当的上下文菜单。

2) 如果您只是想保存信息以供应用程序稍后重新打开,简单的序列化为 XML 或二进制就可以了。如果目的是制作用户可读的内容,您将需要编写一个简单的 csv 导出,或者如果输出需要更复杂,则需要一个自定义序列化程序。

更多信息:

命中测试是评估点击了哪些对象的通用术语,例如,当您单击 DataGridView 时,命中测试逻辑可以告诉您点击了哪个单元格/行/列。许多 Widget 类,包括 DataGridView,都有一个 HitTest 方法,该方法将返回一个提供此信息的对象。如果流程图工具对连接的对象使用自定义绘图,那么您将不得不使用单击坐标来确定流程图中的哪个元素已被单击。

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.hittest.aspx记录了 DataGridView 的 HitTest 方法。

http://www.codeproject.com/KB/list/CSharpHitTest.aspx是 CodeProject 上的一个示例程序,它在 ListView 中命中测试逻辑。

于 2010-09-28T16:58:59.430 回答
2

1 - 处理对象的鼠标单击事件,并做任何你必须做的事情。2 - 将对象图序列化为 XML 或二进制格式。

于 2010-09-28T16:30:06.393 回答
1

我不确定您的应用程序是如何工作的以及您使用了哪些控件,但我建议您查看以下实现具有您提到的功能的设计的文章 -

http://flowpad.codeplex.com/

WPF 图表设计器

http://simulo.codeplex.com/

于 2010-09-29T06:25:33.607 回答
0

来自 Git 的简单库https://gridwizard.wordpress.com/2015/03/25/simple-c-library-to-render-graph-to-flowchart

它通过首先计算 Node.x/y 和 Canvas 大小(给定对象图),然后渲染到 HTML5 来帮助生成流程图。您可以使代码渲染适应 WPF(只需添加另一个渲染 - 从他们的 HTML5 渲染器借用代码)。

于 2015-04-11T19:19:37.480 回答