翻譯|使用教程|編輯:龔雪|2020-11-24 10:00:02.693|閱讀 322 次
概述:DevExpress WinForms擁有180+組件和UI庫(kù),v20.2日前全新發(fā)布,本文將為大家介紹新版本中重磅發(fā)布的SankeyDiagramControl類,有興趣的朋友可以下載最新版控件體驗(yàn)產(chǎn)品功能哦~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
下載DevExpress v20.2完整版 DevExpress v20.2漢化資源獲取
DevExpress WinForms能完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序,無(wú)論是Office風(fēng)格的界面,還是分析處理大批量的業(yè)務(wù)數(shù)據(jù),它都能輕松勝任!體驗(yàn)?點(diǎn)擊下載>>
使用屬性訪問(wèn)節(jié)點(diǎn)標(biāo)簽設(shè)置,以下選項(xiàng)使您可以配置節(jié)點(diǎn)標(biāo)簽的文本:
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事件來(lái)訪問(wèn)特定節(jié)點(diǎn)并根據(jù)特定條件對(duì)其進(jìn)行自定義:
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
節(jié)點(diǎn)排序
該控件根據(jù)基礎(chǔ)數(shù)據(jù)自動(dòng)排列節(jié)點(diǎn),如果希望重新排列節(jié)點(diǎn)或指定自定義排序順序,請(qǐng)創(chuàng)建一個(gè)實(shí)現(xiàn)IComparer <SankeyNode>的類。 然后,將此類的對(duì)象分配給NodeComparer屬性。
以下代碼按節(jié)點(diǎn)的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控件使用為節(jié)點(diǎn)著色,使用唯一標(biāo)簽將調(diào)色板中的新顏色應(yīng)用于每個(gè)節(jié)點(diǎn)。 如果唯一標(biāo)簽的數(shù)量超過(guò)調(diào)色板顏色的數(shù)量,則顏色會(huì)重復(fù)。 要將漸變填充應(yīng)用于鏈接,控件將利用源和目標(biāo)節(jié)點(diǎn)顏色。 指定 屬性來(lái)更改用于繪制Sankey diagram的顏色,您可以選擇預(yù)定義的調(diào)色板。
C#
sankeyDiagramControl1.Colorizer = new SankeyPaletteColorizer { Palette = Palettes.NorthernLights };
VB.NET
sankeyDiagramControl1.Colorizer = New SankeyPaletteColorizer With { .Palette = Palettes.NorthernLights }
您還可以如下創(chuàng)建新的調(diào)色板:
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 }
自定義著色器
要基于自定義算法繪制鏈接和節(jié)點(diǎn),請(qǐng)創(chuàng)建一個(gè)實(shí)現(xiàn) 接口的類。 然后,將此類的對(duì)象分配給Colorizer屬性。
以下代碼實(shí)現(xiàn)了一個(gè)著色器,該著色器將隨機(jī)顏色應(yīng)用于節(jié)點(diǎn),并指定用于將漸變填充應(yīng)用于鏈接的顏色:
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技術(shù)交流群2:775869749 歡迎一起進(jìn)群討論
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:慧都網(wǎng)