Wpf 图形竖琴树布局左向右

Wpf 图形竖琴树布局左向右,wpf,graph-sharp,tree-left-right,Wpf,Graph Sharp,Tree Left Right,我试图用CodePlex中的GraphSharp创建一个树 我查看了示例应用程序,并尝试“重新设计”该示例 问题是,如果我尝试以编程方式设置LayoutAlgorithmType=“Tree”,我会得到一个TargetInvocationException。。。这很神秘,因为在这个例子中它是有效的 我的问题是:如何创建一个从左到右具有树布局和方向的图形 提前感谢:) 我的代码: public partial class MainWindow : Window { private IBid

我试图用CodePlex中的GraphSharp创建一个树

我查看了示例应用程序,并尝试“重新设计”该示例

问题是,如果我尝试以编程方式设置LayoutAlgorithmType=“Tree”,我会得到一个TargetInvocationException。。。这很神秘,因为在这个例子中它是有效的

我的问题是:如何创建一个从左到右具有树布局和方向的图形

提前感谢:)

我的代码:

public partial class MainWindow : Window
{
    private IBidirectionalGraph<object, IEdge<object>> _graphToVisualize;

    public IBidirectionalGraph<object, IEdge<object>> GraphToVisualize
    {
        get { return _graphToVisualize; }
    }

    public MainWindow()
    {
        CreateGraphToVisualize();

        InitializeComponent();
    }

    private void CreateGraphToVisualize()
    {
        var g = new BidirectionalGraph<object, IEdge<object>>();



        string[] vs = new string[5];
        for (int i = 0; i < 5; i++)
        {
            vs[i] = i.ToString();
            g.AddVertex(vs[i]);
        }

        //add some edges
        g.AddEdge(new Edge<object>(vs[0], vs[1]));
        g.AddEdge(new Edge<object>(vs[0], vs[2]));
        g.AddEdge(new Edge<object>(vs[2], vs[3]));
        g.AddEdge(new Edge<object>(vs[1], vs[4]));
        g.AddEdge(new Edge<object>(vs[3], vs[4]));

        layout.LayoutMode = LayoutMode.Automatic;
        layout.LayoutAlgorithmType = "Tree";

        _graphToVisualize = g;

    }
}
公共部分类主窗口:窗口
{
专用IBI方向图_graphToVisualize;
公共方向图图形可视化
{
获取{return}
}
公共主窗口()
{
CreateGraphToVisualize();
初始化组件();
}
私有void createGraphToVisualization()
{
var g=新的双向图();
字符串[]vs=新字符串[5];
对于(int i=0;i<5;i++)
{
vs[i]=i.ToString();
g、 AddVertex(vs[i]);
}
//添加一些边
g、 增边(新边(vs[0],vs[1]);
g、 增边(新边(vs[0],vs[2]);
g、 增边(新边(vs[2],vs[3]);
g、 增边(新边(vs[1],vs[4]);
g、 增边(新边(vs[3],vs[4]);
layout.LayoutMode=LayoutMode.Automatic;
layout.LayoutAlgorithmType=“树”;
_graphToVisualize=g;
}
}
xaml:


在查看了图形库的源代码后,我自己找到了一个解决方案

首先,您必须将布局算法添加到命名空间中:

xmlns:tree="clr-namespace:GraphSharp.Algorithms.Layout.Simple.Tree;assembly=GraphSharp"
之后,可以向GraphLayout添加其他LayoutParameter。在我的例子中,我只是简单地将树的方向从上到下改为左到右

<graphsharp:GraphLayout x:Name="graphLayout"
                                Graph="{Binding ElementName=root,Path=GraphToVisualize}"
                                LayoutAlgorithmType="Tree"
                                OverlapRemovalAlgorithmType="FSA"
                                HighlightAlgorithmType="Simple" RenderTransformOrigin="0.5,0.5">
            <graphsharp:GraphLayout.LayoutParameters>
                <tree:SimpleTreeLayoutParameters Direction="LeftToRight"></tree:SimpleTreeLayoutParameters>
            </graphsharp:GraphLayout.LayoutParameters>
        </graphsharp:GraphLayout>

因此,如果您想更改图形的参数,您必须查看(例如,在Visual Studio的解决方案资源管理器中)算法。-->Layout->Simple->Tree->SimpleTreeLayoutParameters在我的例子中

在代码中:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void root_Loaded(object sender, RoutedEventArgs e)
    {
        CreateGraphToVisualize();
    }

    private void CreateGraphToVisualize()
    {
        var g = new BidirectionalGraph<object, IEdge<object>>();
        string[] vs = new string[5];
        for (int i = 0; i < 5; i++)
        {
            vs[i] = i.ToString();
            g.AddVertex(vs[i]);
        }

        //add some edges
        g.AddEdge(new Edge<object>(vs[0], vs[1]));
        g.AddEdge(new Edge<object>(vs[0], vs[2]));
        g.AddEdge(new Edge<object>(vs[2], vs[3]));
        g.AddEdge(new Edge<object>(vs[1], vs[4]));
        g.AddEdge(new Edge<object>(vs[3], vs[4]));

        //Simple Tree layout parameter variable
        GraphSharp.Algorithms.Layout.Simple.Tree.SimpleTreeLayoutParameters simpleTreeLayoutParameters = new GraphSharp.Algorithms.Layout.Simple.Tree.SimpleTreeLayoutParameters();
        //Simple Tree layout parameter variable values
        simpleTreeLayoutParameters.Direction = GraphSharp.Algorithms.Layout.LayoutDirection.LeftToRight; //THIS IS WHAT YOU EXPECT
        simpleTreeLayoutParameters.LayerGap = 10.0;
        simpleTreeLayoutParameters.OptimizeWidthAndHeight = false;
        simpleTreeLayoutParameters.SpanningTreeGeneration = GraphSharp.Algorithms.Layout.Simple.Tree.SpanningTreeGeneration.DFS;
        simpleTreeLayoutParameters.VertexGap = 10.0;
        simpleTreeLayoutParameters.WidthPerHeight = 2.0;
        //Set layout
        layout.LayoutAlgorithmType = "Tree";
        layout.LayoutParameters = simpleTreeLayoutParameters;
        layout.LayoutMode = LayoutMode.Automatic;
        layout.Graph = g;
    }
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
已加载私有void root_(对象发送方,路由目标)
{
CreateGraphToVisualize();
}
私有void createGraphToVisualization()
{
var g=新的双向图();
字符串[]vs=新字符串[5];
对于(int i=0;i<5;i++)
{
vs[i]=i.ToString();
g、 AddVertex(vs[i]);
}
//添加一些边
g、 增边(新边(vs[0],vs[1]);
g、 增边(新边(vs[0],vs[2]);
g、 增边(新边(vs[2],vs[3]);
g、 增边(新边(vs[1],vs[4]);
g、 增边(新边(vs[3],vs[4]);
//简单树布局参数变量
GraphSharp.Algorithms.Layout.Simple.Tree.SimpleTreeLayoutParameters SimpleTreeLayoutParameters=新GraphSharp.Algorithms.Layout.Simple.Tree.SimpleTreeLayoutParameters();
//简单树布局参数变量值
simpleTreeLayoutParameters.Direction=GraphSharp.Algorithms.Layout.LayoutDirection.LeftToRight;//这就是您所期望的
simpleTreeLayoutParameters.LayerGap=10.0;
simpleTreeLayoutParameters.OptimizeWidthAndHeight=false;
simpleTreeLayoutParameters.SpanningTreeGeneration=GraphSharp.Algorithms.Layout.Simple.Tree.SpanningTreeGeneration.DFS;
simpleTreeLayoutParameters.VertexGap=10.0;
simpleTreeLayoutParameters.WidthPerHeight=2.0;
//集合布局
layout.LayoutAlgorithmType=“树”;
layout.LayoutParameters=simpleTreeLayoutParameters;
layout.LayoutMode=LayoutMode.Automatic;
布局图=g;
}
}
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void root_Loaded(object sender, RoutedEventArgs e)
    {
        CreateGraphToVisualize();
    }

    private void CreateGraphToVisualize()
    {
        var g = new BidirectionalGraph<object, IEdge<object>>();
        string[] vs = new string[5];
        for (int i = 0; i < 5; i++)
        {
            vs[i] = i.ToString();
            g.AddVertex(vs[i]);
        }

        //add some edges
        g.AddEdge(new Edge<object>(vs[0], vs[1]));
        g.AddEdge(new Edge<object>(vs[0], vs[2]));
        g.AddEdge(new Edge<object>(vs[2], vs[3]));
        g.AddEdge(new Edge<object>(vs[1], vs[4]));
        g.AddEdge(new Edge<object>(vs[3], vs[4]));

        //Simple Tree layout parameter variable
        GraphSharp.Algorithms.Layout.Simple.Tree.SimpleTreeLayoutParameters simpleTreeLayoutParameters = new GraphSharp.Algorithms.Layout.Simple.Tree.SimpleTreeLayoutParameters();
        //Simple Tree layout parameter variable values
        simpleTreeLayoutParameters.Direction = GraphSharp.Algorithms.Layout.LayoutDirection.LeftToRight; //THIS IS WHAT YOU EXPECT
        simpleTreeLayoutParameters.LayerGap = 10.0;
        simpleTreeLayoutParameters.OptimizeWidthAndHeight = false;
        simpleTreeLayoutParameters.SpanningTreeGeneration = GraphSharp.Algorithms.Layout.Simple.Tree.SpanningTreeGeneration.DFS;
        simpleTreeLayoutParameters.VertexGap = 10.0;
        simpleTreeLayoutParameters.WidthPerHeight = 2.0;
        //Set layout
        layout.LayoutAlgorithmType = "Tree";
        layout.LayoutParameters = simpleTreeLayoutParameters;
        layout.LayoutMode = LayoutMode.Automatic;
        layout.Graph = g;
    }
}