График в WPF с использованием графа # не нарисован как цепочка
Я использую WPF с библиотекой графа # и пытаюсь нарисовать граф в виде линейной цепочки, поэтому я определил некоторые вершины и соединяющие их ребра как
new Edge<object>(vertices[i], vertices[i+1])
Но проблема в том, что результирующий график отображается не так, как ожидалось, это выглядит следующим образом:
1 -> 2 -> 3 -> 1-> 4
Другими словами, вершина 3 проходит через вершину 1 и достигает вершины 4.
Вот код метода рисования
private void CreateGraphToVisualize()
{
var g = new BidirectionalGraph<object, IEdge<object>>();
// add the vertices to the graph
string[] vertices = new string[5];
for (int i = 0; i < 5; i++)
{
vertices[i] = i.ToString();
g.AddVertex(vertices[i]);
}
// add edges to the graph
g.AddEdge(new Edge<object>(vertices[0], vertices[1]));
g.AddEdge(new Edge<object>(vertices[1], vertices[2]));
g.AddEdge(new Edge<object>(vertices[2], vertices[3]));
g.AddEdge(new Edge<object>(vertices[3], vertices[4]));
GraphToVisualize = g;
}
А вот часть кода xaml, связанная с графом #
<DockPanel Grid.Row="2" Margin="10,10,13,10">
<zoom:ZoomControl>
<graphsharp:GraphLayout x:Name="graphLayout"
Graph="{Binding ElementName=root,Path=GraphToVisualize}"
LayoutAlgorithmType="FR"
OverlapRemovalAlgorithmType="FSA"
HighlightAlgorithmType="Simple"/>
</zoom:ZoomControl>
</DockPanel>
1 ответ
Я пробовал этот код, и из того, что я вижу, нет ничего плохого в этом. Возможно, некоторые ссылки на библиотеки не синхронизированы (QuickGraph-GraphSharp). Я перекомпилировал Graph#-Controls и соединил их все вместе в одном решении. Я удалил Binding в XAML и загрузил график в конструктор MainWindow.
Результирующий график, который я получаю из кода: 0 -> 1 -> 2 -> 3-> 4, а не: 1 -> 2 -> 3 -> 1-> 4. Вы можете скачать полный исходный код здесь чтобы убедиться в этом.
Дальнейшие ссылки