C# 呈现WPF网络地图/图形布局-手动?路径列表框?还有别的吗?

C# 呈现WPF网络地图/图形布局-手动?路径列表框?还有别的吗?,c#,.net,wpf,layout,mvvm,C#,.net,Wpf,Layout,Mvvm,我正在编写代码,为用户提供一个简化的网络图。在任何给定的时间,地图都集中在一个特定的项目上。。。比如说路由器或服务器。根据聚焦项,其他网络实体被分组到集合(即子网或域)中,然后围绕聚焦项进行渲染。线代表连接,组可视地分组在矩形或椭圆内 平移和缩放是必需的功能 可以选择项目以在“属性”样式窗口中显示更多信息。还可以双击某个项目,将整个网络地图重新聚焦到该项目上。此时,整个地图将重新计算 到目前为止,我使用的MVVM没有任何框架。假设对项目进行分组并确定应该显示什么或不显示什么的逻辑都已就绪 我正在

我正在编写代码,为用户提供一个简化的网络图。在任何给定的时间,地图都集中在一个特定的项目上。。。比如说路由器或服务器。根据聚焦项,其他网络实体被分组到集合(即子网或域)中,然后围绕聚焦项进行渲染。线代表连接,组可视地分组在矩形或椭圆内

平移和缩放是必需的功能

可以选择项目以在“属性”样式窗口中显示更多信息。还可以双击某个项目,将整个网络地图重新聚焦到该项目上。此时,整个地图将重新计算

到目前为止,我使用的MVVM没有任何框架。假设对项目进行分组并确定应该显示什么或不显示什么的逻辑都已就绪

我正在寻找实现UI布局的最佳方法。到目前为止,我知道以下选项:

  • 使用画布进行布局(在ScrollViewer中处理平移)。让我的ViewModel使用布局管理器类型的类,该类将处理分配所有布局属性(顶部、左侧等)。将我的显示项集绑定到ItemsControl,并使用数据模板处理实际渲染
  • 这种方法的缺点是:

    • 对我来说,高度手工布局。很多计算
    • 我必须手动处理项目选择
    • 连接线的计算是手动的
    这种方法的优点是:

    • 我可以根据需要(手动)在子网之间绘制其他线
    • 稍后可以添加其他LayoutManager以不同方式呈现显示
    • 这可能被包装成某种GraphLayout控件,以便重新使用
  • 将焦点项目显示在显示屏中央,然后使用PathListBox布局其他项目。让我的ViewModel公开一个要绘制的简单列表,并将它们绑定到PathListBox。覆盖ListBoxItem模板,也可以创建从聚焦项(棘手)的边框到绑定项的线条几何图形。使用DataTemplates处理被绑定的项是子网的情况,在这种情况下,我们将使用模板中的另一个PathListBox来显示子网内的项
  • 这种方法的缺点是:

    • 跨多个“PathListBox”同步所选项目。一次只能选择整个图形上的一个项目,但每个子PathListBox都保留自己的选择。此外,无法选择子网,但无需额外工作即可选择
    • 在ListBoxItem模板中绘制连接线有点麻烦,因为我需要知道要连接到的焦点项目的正确一侧
    这种方法的优点是:

    • 我可以远离版画行业,还有更多

    我正在从其他遇到类似问题或比我有更多WPF经验的人那里寻求任何建议或想法。我正在使用WPF 4,因此任何新的技巧都是合法的和受鼓励的。

    我想看看开源应用程序。这是一个家谱应用程序,它以一种非常类似于您所描述的方式绘制家庭成员之间的关系。我猜那里的代码可以帮你实现90%的目标。

    很好的例子。。。谢谢你指出这一点。现在我只需要弄清楚如何将他们的想法转化为MVVM体系结构。