From 20da9dbe94e349860c950acb9236a5d26ef8cf9a Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Fri, 21 Mar 2025 08:44:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0`Serie`=E7=9A=84`Label`?= =?UTF-8?q?=E7=9A=84`formatter`=E6=94=AF=E6=8C=81`{index}`=E9=80=9A?= =?UTF-8?q?=E9=85=8D=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runtime/Component/Label/SerieLabelHelper.cs | 16 ++++++++++++ Runtime/Helper/FormatterHelper.cs | 13 +++++++--- Runtime/Serie/SerieHandler.cs | 28 ++++++--------------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/Runtime/Component/Label/SerieLabelHelper.cs b/Runtime/Component/Label/SerieLabelHelper.cs index 2cd9428a..10035c43 100644 --- a/Runtime/Component/Label/SerieLabelHelper.cs +++ b/Runtime/Component/Label/SerieLabelHelper.cs @@ -53,6 +53,22 @@ namespace XCharts.Runtime } } + public static string GetTitleFormatterContent(Serie serie, SerieData serieData, + int dataIndex, LabelStyle titleStyle, BaseChart chart) + { + string content; + if (string.IsNullOrEmpty(titleStyle.formatter)) + { + content = serieData.name; + } + else + { + content = titleStyle.formatter; + FormatterHelper.ReplaceContent(ref content, dataIndex, titleStyle.numericFormatter, serie, chart, null, serieData); + } + return content; + } + public static void SetGaugeLabelText(Serie serie) { var serieData = serie.GetSerieData(0); diff --git a/Runtime/Helper/FormatterHelper.cs b/Runtime/Helper/FormatterHelper.cs index 6d1c4be5..ca005435 100644 --- a/Runtime/Helper/FormatterHelper.cs +++ b/Runtime/Helper/FormatterHelper.cs @@ -37,7 +37,7 @@ namespace XCharts.Runtime /// 选中的类目,一般用在折线图和柱状图 /// public static bool ReplaceContent(ref string content, int dataIndex, string numericFormatter, Serie serie, - BaseChart chart, string colorName = null) + BaseChart chart, string colorName = null, SerieData serieData = null) { var foundDot = false; var mc = s_Regex.Matches(content); @@ -112,7 +112,7 @@ namespace XCharts.Runtime } else { - var serieData = serie.GetSerieData(bIndex); + serieData = serie.GetSerieData(bIndex); content = content.Replace(old, serieData.name); } } @@ -207,6 +207,10 @@ namespace XCharts.Runtime } } } + if (serieData != null) + { + ReplaceIndexContent(ref content, serie.useSortData ? serieData.sortIndex : serieData.index, serie.dataCount); + } content = s_RegexNewLine.Replace(content, PH_NN); return foundDot; } @@ -310,7 +314,10 @@ namespace XCharts.Runtime } } } - ReplaceIndexContent(ref content, sortData ? serieData.sortIndex : serieData.index, dataCount); + if (serieData != null) + { + ReplaceIndexContent(ref content, sortData ? serieData.sortIndex : serieData.index, dataCount); + } content = TrimAndReplaceLine(content); } diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index cf4a0459..d7468ed2 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -432,17 +432,8 @@ namespace XCharts.Runtime if (titleStyle != null) { var color = chart.GetItemColor(serie, null); - var content = string.Empty; - if (string.IsNullOrEmpty(titleStyle.formatter)) - { - content = serie.serieName; - } - else - { - content = titleStyle.formatter; - FormatterHelper.ReplaceContent(ref content, -1, titleStyle.numericFormatter, serie, chart); - } - var label = ChartHelper.AddChartLabel("title_" + 0, serieTitleRoot.transform, titleStyle, chart.theme.common, + var content = SerieLabelHelper.GetTitleFormatterContent(serie, null, -1, titleStyle, chart); + var label = ChartHelper.AddChartLabel("title_0", serieTitleRoot.transform, titleStyle, chart.theme.common, content, color, TextAnchor.MiddleCenter); serie.context.titleObject = label; label.SetActive(titleStyle.show, true); @@ -461,16 +452,7 @@ namespace XCharts.Runtime if (titleStyle == null) continue; m_InitTitleLabel = true; var color = chart.GetItemColor(serie, serieData); - var content = string.Empty; - if (string.IsNullOrEmpty(titleStyle.formatter)) - { - content = serieData.name; - } - else - { - content = titleStyle.formatter; - FormatterHelper.ReplaceContent(ref content, i, titleStyle.numericFormatter, serie, chart); - } + var content = SerieLabelHelper.GetTitleFormatterContent(serie, serieData, i, titleStyle, chart); var label = ChartHelper.AddChartLabel("title_" + i, serieTitleRoot.transform, titleStyle, chart.theme.common, content, color, TextAnchor.MiddleCenter); serieData.titleObject = label; @@ -493,6 +475,8 @@ namespace XCharts.Runtime var labelPosition = GetSerieDataTitlePosition(null, titleStyle); var offset = titleStyle.GetOffset(serie.context.insideRadius); serie.context.titleObject.SetPosition(labelPosition + offset); + var content = SerieLabelHelper.GetTitleFormatterContent(serie, null, -1, titleStyle, chart); + serie.context.titleObject.SetText(content); } } else @@ -506,6 +490,8 @@ namespace XCharts.Runtime var labelPosition = GetSerieDataTitlePosition(serieData, titleStyle); var offset = titleStyle.GetOffset(serie.context.insideRadius); serieData.titleObject.SetPosition(labelPosition + offset); + var content = SerieLabelHelper.GetTitleFormatterContent(serie, serieData, i, titleStyle, chart); + serieData.titleObject.SetText(content); } } }