翻譯|使用教程|編輯:龔雪|2020-11-24 10:00:02.693|閱讀 314 次
概述:DevExpress WinForms擁有180+組件和UI庫,v20.2日前全新發布,本文將為大家介紹新版本中重磅發布的SankeyDiagramControl類,有興趣的朋友可以下載最新版控件體驗產品功能哦~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
下載DevExpress v20.2完整版 DevExpress v20.2漢化資源獲取
DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!體驗?點擊下載>>
使用屬性訪問節點標簽設置,以下選項使您可以配置節點標簽的文本:
C#
sankeyDiagramControl1.NodeLabel.TextOrientation = TextOrientation.TopToBottom; sankeyDiagramControl1.NodeLabel.MaxWidth = 200; sankeyDiagramControl1.NodeLabel.MaxLineCount = 1; sankeyDiagramControl1.NodeLabel.TextAlignment = StringAlignment.Center; sankeyDiagramControl1.NodeLabel.Font = new Font(FontFamily.GenericSerif, 10);
VB.NET
sankeyDiagramControl1.NodeLabel.TextOrientation = TextOrientation.TopToBottom sankeyDiagramControl1.NodeLabel.MaxWidth = 200 sankeyDiagramControl1.NodeLabel.MaxLineCount = 1 sankeyDiagramControl1.NodeLabel.TextAlignment = StringAlignment.Center sankeyDiagramControl1.NodeLabel.Font = New Font(FontFamily.GenericSerif, 10)
您還可以處理CustomizeNode事件來訪問特定節點并根據特定條件對其進行自定義:
C#
sankeyDiagramControl1.CustomizeNode += OnCustomizeNode; //... private void OnCustomizeNode(object sender, CustomizeSankeyNodeEventArgs e) { if (e.Label.Text == "France" && e.Node.Level == 0) { e.Label.Font = new Font("Tahoma", 16); e.Label.Text = "France (Source)"; } }
VB.NET
Private Sub OnCustomizeNode(ByVal sender As Object, ByVal e As CustomizeSankeyNodeEventArgs) If e.Label.Text Is "France" AndAlso e.Node.Level = 0 Then e.Label.Font = New Font("Tahoma", 16) e.Label.Text = "France (Source)" End If End Sub
節點排序
該控件根據基礎數據自動排列節點,如果希望重新排列節點或指定自定義排序順序,請創建一個實現IComparer <SankeyNode>的類。 然后,將此類的對象分配給NodeComparer屬性。
以下代碼按節點的TotalWeight值降序排列它們:
C#
private void Form1_Load(object sender, EventArgs e) { sankeyDiagramControl1.NodeComparer = new MyNodeComparer(); } public class MyNodeComparer : IComparer<SankeyNode> { public int Compare(SankeyNode x, SankeyNode y) { return y.TotalWeight.CompareTo(x.TotalWeight); } }
VB.NET
Friend Class SurroundingClass Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) sankeyDiagramControl1.NodeComparer = New MyNodeComparer() End Sub Public Class MyNodeComparer Inherits IComparer(Of SankeyNode) Public Function Compare(ByVal x As SankeyNode, ByVal y As SankeyNode) As Integer Return y.TotalWeight.CompareTo(x.TotalWeight) End Function End Class End Class
Sankey diagram控件使用為節點著色,使用唯一標簽將調色板中的新顏色應用于每個節點。 如果唯一標簽的數量超過調色板顏色的數量,則顏色會重復。 要將漸變填充應用于鏈接,控件將利用源和目標節點顏色。 指定 屬性來更改用于繪制Sankey diagram的顏色,您可以選擇預定義的調色板。
C#
sankeyDiagramControl1.Colorizer = new SankeyPaletteColorizer { Palette = Palettes.NorthernLights };
VB.NET
sankeyDiagramControl1.Colorizer = New SankeyPaletteColorizer With { .Palette = Palettes.NorthernLights }
您還可以如下創建新的調色板:
C#
using System.Drawing; //... Palette palette = new Palette("Custom") { Color.Red, Color.Green, Color.Blue }; sankeyDiagramControl1.Colorizer = new SankeyPaletteColorizer { Palette = palette };
VB.NET
Imports System.Drawing '... Dim palette As Palette = New Palette("Custom") From { Color.Red, Color.Green, Color.Blue } sankeyDiagramControl1.Colorizer = New SankeyPaletteColorizer With { palette }
自定義著色器
要基于自定義算法繪制鏈接和節點,請創建一個實現 接口的類。 然后,將此類的對象分配給Colorizer屬性。
以下代碼實現了一個著色器,該著色器將隨機顏色應用于節點,并指定用于將漸變填充應用于鏈接的顏色:
C#
private void Form1_Load(object sender, EventArgs e) { sankeyDiagramControl1.Colorizer = new MyColorizer { LinkSourceColor = Color.Red, LinkTargetColor = Color.Yellow }; public class MyColorizer : ISankeyColorizer { public event EventHandler ColorizerChanged; Random rand = new Random(); Dictionary<string, Color> KeyColorPairs = new Dictionary<string, Color>(); public Color LinkSourceColor { get; set; } public Color LinkTargetColor { get; set; } public Color GetLinkSourceColor(SankeyLink link) { return LinkSourceColor; } public Color GetLinkTargetColor(SankeyLink link) { return LinkTargetColor; } public Color GetNodeColor(SankeyNode info) { if (!KeyColorPairs.TryGetValue((string)info.Tag, out Color nodeColor)) { nodeColor = GenerateColor(); KeyColorPairs.Add((string)info.Tag, nodeColor); } return nodeColor; } private Color GenerateColor() { return Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256)); } }
VB.NET
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) sankeyDiagramControl1.Colorizer = New MyColorizer With { .LinkSourceColor = Color.Red, .LinkTargetColor = Color.Yellow } End Sub Public Class MyColorizer Inherits ISankeyColorizer Public Event ColorizerChanged As EventHandler Private rand As Random = New Random() Private KeyColorPairs As Dictionary(Of String, Color) = New Dictionary(Of String, Color)() Public Property LinkSourceColor As Color Public Property LinkTargetColor As Color Public Function GetLinkSourceColor(ByVal link As SankeyLink) As Color Return LinkSourceColor End Function Public Function GetLinkTargetColor(ByVal link As SankeyLink) As Color Return LinkTargetColor End Function Public Function GetNodeColor(ByVal info As SankeyNode) As Color Dim nodeColor As Color = Nothing If Not KeyColorPairs.TryGetValue(CStr(info.Tag), nodeColor) Then nodeColor = GenerateColor() KeyColorPairs.Add(CStr(info.Tag), nodeColor) End If Return nodeColor End Function Private Function GenerateColor() As Color Return Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256)) End Function End Class
DevExpress技術交流群2:775869749 歡迎一起進群討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網