A graph layout panel for AvaloniaUI
Перейти к файлу
Olivier Azeau ec62835399 Updated README - and included in nuget package 2023-10-14 13:15:08 +02:00
.github/workflows build control on local source first 2023-10-14 12:43:25 +02:00
automatic-graph-layout@d7219cda55 Display control version 2023-10-07 13:41:08 +02:00
doc/images updated doc 2020-03-27 01:51:48 +01:00
sample Add link to app on Google Play 2023-10-12 01:44:40 +02:00
sample.Android increment android version 2023-10-13 01:55:59 +02:00
sample.Browser Open URL in Family Tree sample on all platforms (desktop, browser, android) 2023-10-07 23:45:34 +02:00
sample.Desktop Open URL in Family Tree sample on all platforms (desktop, browser, android) 2023-10-07 23:45:34 +02:00
src Updated README - and included in nuget package 2023-10-14 13:15:08 +02:00
.editorconfig Add .editorconfig 2020-08-21 16:57:32 +03:00
.gitignore Update gitignore 2020-08-20 21:34:31 +03:00
.gitmodules added MSAGL as submodule 2020-02-18 19:29:08 +01:00
AvaloniaGraphControl.sln Display control version 2023-10-07 13:41:08 +02:00
Directory.Build.props Add multiplatform (desktop/browser/android) sample use of the control 2023-10-01 21:46:45 +02:00
LICENSE added nuspec and published v0.1.1 to nuget.org 2020-02-19 18:14:42 +01:00
NuGet.Config Add multiplatform (desktop/browser/android) sample use of the control 2023-10-01 21:46:45 +02:00
README.md Updated README - and included in nuget package 2023-10-14 13:15:08 +02:00
build.sh Display control version 2023-10-07 13:41:08 +02:00
clean_build.sh Display control version 2023-10-07 13:41:08 +02:00
global.json Add multiplatform (desktop/browser/android) sample use of the control 2023-10-01 21:46:45 +02:00

README.md

AvaloniaGraphControl

A graph layout panel for AvaloniaUI

Usage

Each individual graph is displayed through the GraphPanel control included in the assembly

<Window xmlns:agc="clr-namespace:AvaloniaGraphControl;assembly=AvaloniaGraphControl">
    <agc:GraphPanel Graph="{Binding MyGraph}" LayoutMethod="SugiyamaScheme" />
</Window>

The layout is internally implemented with MSAGL (Microsoft Automatic Graph Layout).

The following layout methods are available in MSAGL and can be set in the GraphPanel control independently of the graph model:

The GraphPanel control and the MSAGL assemblies are bundled in a nuget package. The existing MSAGL nuget packages are dedicated to the .NET Framework and do not include any netstandard assembly.

MVVM

The GraphPanel control leverages the MVVM pattern used by AvaloniaUI. Each node of the graph view can be customized according to the underlying view model in the graph definition.

<Window xmlns:agc="clr-namespace:AvaloniaGraphControl;assembly=AvaloniaGraphControl">
    <agc:GraphPanel Graph="{Binding MyGraph}" LayoutMethod="SugiyamaScheme" />
      <agc:GraphPanel.DataTemplates>
        <DataTemplate DataType="{x:Type local:StandardItem}">
          <agc:TextSticker Text="{Binding Name}" Shape="Ellipse" Padding="30,10" />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:InteractiveItem}">
          <ToggleButton Content="{Binding Name}" Padding="20,5" />
        </DataTemplate>
      </agc:GraphPanel.DataTemplates>
    </agc:GraphPanel>
</Window>

Cross-platform

As shown in the demo, this graph panel can be used in cross-platform AvaloniaUI applications. It was successfully tested on Linux Desktop, Windows Desktop, Android and Browser (web assembly) environments.

Example of graph definition

public static Graph MyGraph
{
  get
  {
    var graph = new Graph();
    graph.Edges.Add(new Edge("A", "B"));
    graph.Edges.Add(new Edge("A", "D"));
    graph.Edges.Add(new Edge("A", "E"));
    graph.Edges.Add(new Edge("B", "C"));
    graph.Edges.Add(new Edge("B", "D"));
    graph.Edges.Add(new Edge("D", "A"));
    graph.Edges.Add(new Edge("D", "E"));
    return graph;
  }
}

Outcome of graph example

Some graphs from the sample application

Family Tree

State Machine