我正在使用带有图形#库的WPF,我正在尝试将图形绘制为线性链,因此我定义了一些顶点,并将边连接为
new Edge<object>(vertices[i], vertices[i+1])
Run Code Online (Sandbox Code Playgroud)
但问题是结果图未按预期绘制,如下所示:
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;
}
Run Code Online (Sandbox Code Playgroud)
这是与图形相关的xaml代码的一部分#
<DockPanel Grid.Row="2" …Run Code Online (Sandbox Code Playgroud) 我正在使用GraphSharp框架,它只有很少的文档(http://graphsharp.codeplex.com/),我正在尝试更改某些边缘的颜色.
实际上是这样的(使这个边缘变红).
g.AddEdge(new Edge<object>("A","B"), Color.Red);
Run Code Online (Sandbox Code Playgroud)
有人为此有任何代码片段吗?
我目前正在开发一个Visual Studio插件(VSPackage),它最终应该能够可视化调用关系.为了表示它们,我想使用管理图形的Graph#库(避免重叠边缘等).不幸的是,我在运行时在我的XAML中收到以下错误消息:
XamlParseException:未实现方法或操作.
<graph:CallRelationGraphLayout Graph="{Binding RelationGraph}"/>标签上会弹出错误.
<UserControl x:Class="Biocoder.InteractiveExploration.View.ExplorationControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:graphsharp="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls"
xmlns:zoom="clr-namespace:WPFExtensions.Controls;assembly=WPFExtensions"
xmlns:graph="clr-namespace:Biocoder.InteractiveExploration.Graph"
xmlns:viewmodels="clr-namespace:Biocoder.InteractiveExploration.ViewModel"
xmlns:controls="clr-namespace:Biocoder.InteractiveExploration.Controls" mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.DataContext>
<viewmodels:ExplorationToolViewModel/>
</UserControl.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<zoom:ZoomControl Grid.Row="1"
Zoom="0.2"
ZoomBoxOpacity="0.5"
Background="Yellow">
<graph:CallRelationGraphLayout Graph="{Binding RelationGraph}"/>
</zoom:ZoomControl>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
我还创建了自己的顶点,边和图布局类.我的图最终应该表示方法(顶点)之间的调用关系(边).
MethodVertex.cs
public class MethodVertex
{
public string ID { get; private set; }
public bool IsMale { get; private set; }
public MethodVertex(string id, bool isMale)
{
ID = id;
IsMale = isMale;
}
public …Run Code Online (Sandbox Code Playgroud) 这是我的窗口代码:
public partial class MainWindow
{
private MainWindowViewModel _mainWindowViewModel;
public MainWindow()
{
InitializeComponent();
_mainWindowViewModel = new MainWindowViewModel();
DataContext = _mainWindowViewModel;
}
}
Run Code Online (Sandbox Code Playgroud)
和视图模型代码:
class MainWindowViewModel : ViewModelBase
{
private BidirectionalGraph<string, IEdge<string>> _graph;
public BidirectionalGraph<string, IEdge<string>> Graph
{
get { return _graph; }
set
{
_graph = value;
NotifyPropertyChanged("Graph");
}
}
public MainWindowViewModel()
{
Graph = new BidirectionalGraph<string, IEdge<string>>();
// test data
const string vertex1 = "123";
const string vertex2 = "456";
const string vertex3 = "ddd";
Graph.AddVertex(vertex1);
Graph.AddVertex(vertex2);
Graph.AddVertex(vertex3);
Graph.AddEdge(new …Run Code Online (Sandbox Code Playgroud) 我尝试使用 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 …Run Code Online (Sandbox Code Playgroud)