đây là giải pháp. Bạn nên tạo một loại cạnh tùy chỉnh và lưu trữ thông tin màu sắc trong chính đối tượng cạnh hoặc có thể tạo trình chuyển đổi có thể tính màu từ đối tượng cạnh.
Ngoài ra, bạn nên tùy chỉnh EdgeControl
với một số Style
.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using GraphSharp;
using QuickGraph;
using GraphSharp.Controls;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public IBidirectionalGraph<object, IEdge<object>> Graph { get; set; }
public MainWindow()
{
var g = new BidirectionalGraph<object, IEdge<object>>();
IList<Object> vertices = new List<Object>();
for (int i = 0; i < 6; i++)
{
vertices.Add(i.ToString());
}
for (int i = 0; i < 5; i++)
{
Color edgeColor = (i % 2 == 0) ? Colors.Black : Colors.Red;
Console.WriteLine(edgeColor);
g.AddVerticesAndEdge(new MyEdge(vertices[i], vertices[i+1]) {
Id = i.ToString(),
EdgeColor = edgeColor
});
}
Graph = g;
Console.WriteLine(Graph.VertexCount);
Console.WriteLine(Graph.EdgeCount);
InitializeComponent();
}
}
public class MyEdge : TypedEdge<Object>
{
public String Id { get; set; }
public Color EdgeColor { get; set; }
public MyEdge(Object source, Object target) : base(source, target, EdgeTypes.General) { }
}
public class EdgeColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new SolidColorBrush((Color) value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:graphsharp="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls"
xmlns:my="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525"
Name="root">
<Grid>
<Grid.Resources>
<my:EdgeColorConverter x:Key="edgeToEdgeColorConverter"/>
<Style TargetType="{x:Type graphsharp:EdgeControl}">
<Style.Setters>
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Self},Path=Edge.EdgeColor,Converter={StaticResource edgeToEdgeColorConverter}}"/>
</Style.Setters>
</Style>
</Grid.Resources>
<graphsharp:GraphLayout x:Name="graphLayout"
Graph="{Binding ElementName=root,Path=Graph}"
OverlapRemovalAlgorithmType="FSA"
HighlightAlgorithmType="Simple"
LayoutAlgorithmType="FR"/>
</Grid>
</Window>
Các công trình lớn !! Cám ơn rất nhiều :) – Sam