diff --git a/SunnyUI/Charts/UILineChartOption.cs b/SunnyUI/Charts/UILineChartOption.cs
index d77ba514..22d21c42 100644
--- a/SunnyUI/Charts/UILineChartOption.cs
+++ b/SunnyUI/Charts/UILineChartOption.cs
@@ -20,6 +20,7 @@
* 2022-07-15: V3.2.1 增加移除线的操作
* 2022-11-25: V3.2.2 增加了线的最大点数设置,以及移除点数的设置
* 2022-11-25: V3.2.2 重构对象
+ * 2023-05-06: V3.3.6 增加了UpdateYData函数,按序号更新Y轴值
******************************************************************************/
using System;
@@ -168,6 +169,12 @@ namespace Sunny.UI
}
}
+ public void UpdateYData(string seriesName, int index, double value)
+ {
+ if (!Series.ContainsKey(seriesName)) return;
+ Series[seriesName].UpdateYData(index, value);
+ }
+
public void Clear()
{
foreach (var series in Series.Values)
@@ -476,6 +483,15 @@ namespace Sunny.UI
private int MaxCount = 0;
+ public void UpdateYData(int index, double value)
+ {
+ if (YData.Count == 0) return;
+ if (index >= 0 && index < YData.Count)
+ {
+ YData[index] = value;
+ }
+ }
+
///
/// 设置线的最大点数,0不限制
///
diff --git a/SunnyUI/Common/UGDI.cs b/SunnyUI/Common/UGDI.cs
index 43d3da5e..a65073a2 100644
--- a/SunnyUI/Common/UGDI.cs
+++ b/SunnyUI/Common/UGDI.cs
@@ -592,7 +592,7 @@ namespace Sunny.UI
/// 水平方向
/// 垂直方向
/// 文本布局
- public static StringFormat SetAlignment(StringAlignment horizontalAlignment = StringAlignment.Center, StringAlignment verticalAlignment = StringAlignment.Center)
+ public static StringFormat SetCenterAlignment(StringAlignment horizontalAlignment = StringAlignment.Center, StringAlignment verticalAlignment = StringAlignment.Center)
{
return new StringFormat { Alignment = horizontalAlignment, LineAlignment = verticalAlignment };
}
diff --git a/SunnyUI/Common/UGraphics.cs b/SunnyUI/Common/UGraphics.cs
index c0ab0c2d..5983d044 100644
--- a/SunnyUI/Common/UGraphics.cs
+++ b/SunnyUI/Common/UGraphics.cs
@@ -173,6 +173,182 @@ namespace Sunny.UI
public static void DrawString(this Graphics g, string text, Font font, Color color, Point pt, StringFormat format)
=> g.DrawString(text, font, color, pt.X, pt.Y, format);
+ ///
+ /// 绘制字符串
+ ///
+ /// 绘图图元
+ /// 字符串
+ /// 字体
+ /// 颜色
+ /// 大小
+ /// 边距
+ /// 位置位置
+ public static void DrawString(this Graphics g, string str, Font font, Color color, Size size, Padding padding, ContentAlignment align, int offsetX = 0, int offsetY = 0)
+ {
+ if (str.IsNullOrEmpty()) return;
+ SizeF sf = g.MeasureString(str, font);
+ using Brush br = color.Brush();
+ switch (align)
+ {
+ case ContentAlignment.MiddleCenter:
+ g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX,
+ padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
+ break;
+
+ case ContentAlignment.TopLeft:
+ g.DrawString(str, font, br, padding.Left + offsetX, padding.Top + offsetY);
+ break;
+
+ case ContentAlignment.TopCenter:
+ g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX, padding.Top + offsetY);
+ break;
+
+ case ContentAlignment.TopRight:
+ g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, padding.Top + offsetY);
+ break;
+
+ case ContentAlignment.MiddleLeft:
+ g.DrawString(str, font, br, padding.Left + offsetX, padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
+ break;
+
+ case ContentAlignment.MiddleRight:
+ g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
+ break;
+
+ case ContentAlignment.BottomLeft:
+ g.DrawString(str, font, br, padding.Left + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
+ break;
+
+ case ContentAlignment.BottomCenter:
+ g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
+ break;
+
+ case ContentAlignment.BottomRight:
+ g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
+ break;
+ }
+ }
+
+ ///
+ /// 绘制字符串
+ ///
+ /// 绘图图元
+ /// 文字
+ /// 字体
+ /// 颜色
+ /// 区域
+ /// 格式
+ /// 角度
+ public static void DrawString(this Graphics g, string text, Font font, Color color, RectangleF rect, StringFormat format, float angle)
+ {
+ if (text.IsNullOrEmpty()) return;
+ using Brush br = color.Brush();
+ g.DrawStringRotateAtCenter(text, font, color, rect.Center(), (int)angle);
+ }
+
+ ///
+ /// 以文字中心点为原点,旋转文字
+ ///
+ /// 绘图图元
+ /// 文字
+ /// 字体
+ /// 颜色
+ /// 文字中心点
+ /// 角度
+ public static void DrawStringRotateAtCenter(this Graphics g, string text, Font font, Color color, PointF centerPoint, float angle)
+ {
+ if (text.IsNullOrEmpty()) return;
+ using Brush br = color.Brush();
+ g.DrawStringRotateAtCenter(text, font, br, centerPoint, angle);
+ }
+
+ ///
+ /// 以文字中心点为原点,旋转文字
+ ///
+ /// 绘图图元
+ /// 文字
+ /// 字体
+ /// 笔刷
+ /// 文字中心点
+ /// 角度
+ public static void DrawStringRotateAtCenter(this Graphics g, string text, Font font, Brush brush, PointF centerPoint, float angle)
+ {
+ if (text.IsNullOrEmpty()) return;
+ SizeF sf = g.MeasureString(text, font);
+ float x1 = centerPoint.X - sf.Width / 2.0f;
+ float y1 = centerPoint.Y - sf.Height / 2.0f;
+
+ // 把画板的原点(默认是左上角)定位移到文字中心
+ g.TranslateTransform(x1 + sf.Width / 2, y1 + sf.Height / 2);
+ // 旋转画板
+ g.RotateTransform(angle);
+ // 回退画板x,y轴移动过的距离
+ g.TranslateTransform(-(x1 + sf.Width / 2), -(y1 + sf.Height / 2));
+ g.DrawString(text, font, brush, x1, y1);
+
+ //恢复
+ g.TranslateTransform(x1 + sf.Width / 2, y1 + sf.Height / 2);
+ g.RotateTransform(-angle);
+ g.TranslateTransform(-(x1 + sf.Width / 2), -(y1 + sf.Height / 2));
+ }
+
+ ///
+ /// 以旋转点为原点,旋转文字
+ ///
+ /// 绘图图元
+ /// 文本
+ /// 字体
+ /// 填充
+ /// 旋转点
+ /// 布局方式
+ /// 角度
+ public static void DrawString(this Graphics g, string text, Font font, Brush brush, PointF rotatePoint, StringFormat format, float angle)
+ {
+ if (text.IsNullOrEmpty()) return;
+ // Save the matrix
+ Matrix mtxSave = g.Transform;
+ Matrix mtxRotate = g.Transform;
+ mtxRotate.RotateAt(angle, rotatePoint);
+ g.Transform = mtxRotate;
+ g.DrawString(text, font, brush, rotatePoint, format);
+
+ // Reset the matrix
+ g.Transform = mtxSave;
+ }
+
+ ///
+ /// 绘制字符串
+ ///
+ /// 绘图图元
+ /// 文字
+ /// 字体
+ /// 颜色
+ /// 旋转点
+ /// 格式
+ /// 角度
+ public static void DrawString(this Graphics g, string text, Font font, Color color, PointF rotatePoint, StringFormat format, float angle)
+ {
+ if (text.IsNullOrEmpty()) return;
+ using Brush br = color.Brush();
+ g.DrawString(text, font, br, rotatePoint, format, angle);
+ }
+
+ ///
+ /// 绘制根据矩形旋转文本
+ ///
+ /// 绘图图元
+ /// 文本
+ /// 字体
+ /// 填充
+ /// 局部矩形
+ /// 布局方式
+ /// 角度
+ public static void DrawString(this Graphics g, string text, Font font, Brush brush, RectangleF rect, StringFormat format, float angle)
+ {
+ if (text.IsNullOrEmpty()) return;
+ g.DrawStringRotateAtCenter(text, font, brush, rect.Center(), angle);
+ }
+
///
/// 绘制多条直线连接
///
@@ -1463,182 +1639,6 @@ namespace Sunny.UI
new Rectangle(cutLeft, cutTop, img.Width - cutLeft - cutRight, img.Height - cutTop - cutBottom), GraphicsUnit.Pixel);
}
- ///
- /// 绘制字符串
- ///
- /// 绘图图元
- /// 字符串
- /// 字体
- /// 颜色
- /// 大小
- /// 边距
- /// 位置位置
- public static void DrawString(this Graphics g, string str, Font font, Color color, Size size, Padding padding, ContentAlignment align, int offsetX = 0, int offsetY = 0)
- {
- if (str.IsNullOrEmpty()) return;
- SizeF sf = g.MeasureString(str, font);
- using Brush br = color.Brush();
- switch (align)
- {
- case ContentAlignment.MiddleCenter:
- g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX,
- padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
- break;
-
- case ContentAlignment.TopLeft:
- g.DrawString(str, font, br, padding.Left + offsetX, padding.Top + offsetY);
- break;
-
- case ContentAlignment.TopCenter:
- g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX, padding.Top + offsetY);
- break;
-
- case ContentAlignment.TopRight:
- g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, padding.Top + offsetY);
- break;
-
- case ContentAlignment.MiddleLeft:
- g.DrawString(str, font, br, padding.Left + offsetX, padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
- break;
-
- case ContentAlignment.MiddleRight:
- g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
- break;
-
- case ContentAlignment.BottomLeft:
- g.DrawString(str, font, br, padding.Left + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
- break;
-
- case ContentAlignment.BottomCenter:
- g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
- break;
-
- case ContentAlignment.BottomRight:
- g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
- break;
- }
- }
-
- ///
- /// 绘制字符串
- ///
- /// 绘图图元
- /// 文字
- /// 字体
- /// 颜色
- /// 区域
- /// 格式
- /// 角度
- public static void DrawString(this Graphics g, string text, Font font, Color color, RectangleF rect, StringFormat format, float angle)
- {
- if (text.IsNullOrEmpty()) return;
- using Brush br = color.Brush();
- g.DrawStringRotateAtCenter(text, font, color, rect.Center(), (int)angle);
- }
-
- ///
- /// 以文字中心点为原点,旋转文字
- ///
- /// 绘图图元
- /// 文字
- /// 字体
- /// 颜色
- /// 文字中心点
- /// 角度
- public static void DrawStringRotateAtCenter(this Graphics g, string text, Font font, Color color, PointF centerPoint, float angle)
- {
- if (text.IsNullOrEmpty()) return;
- using Brush br = color.Brush();
- g.DrawStringRotateAtCenter(text, font, br, centerPoint, angle);
- }
-
- ///
- /// 以文字中心点为原点,旋转文字
- ///
- /// 绘图图元
- /// 文字
- /// 字体
- /// 笔刷
- /// 文字中心点
- /// 角度
- public static void DrawStringRotateAtCenter(this Graphics g, string text, Font font, Brush brush, PointF centerPoint, float angle)
- {
- if (text.IsNullOrEmpty()) return;
- SizeF sf = g.MeasureString(text, font);
- float x1 = centerPoint.X - sf.Width / 2.0f;
- float y1 = centerPoint.Y - sf.Height / 2.0f;
-
- // 把画板的原点(默认是左上角)定位移到文字中心
- g.TranslateTransform(x1 + sf.Width / 2, y1 + sf.Height / 2);
- // 旋转画板
- g.RotateTransform(angle);
- // 回退画板x,y轴移动过的距离
- g.TranslateTransform(-(x1 + sf.Width / 2), -(y1 + sf.Height / 2));
- g.DrawString(text, font, brush, x1, y1);
-
- //恢复
- g.TranslateTransform(x1 + sf.Width / 2, y1 + sf.Height / 2);
- g.RotateTransform(-angle);
- g.TranslateTransform(-(x1 + sf.Width / 2), -(y1 + sf.Height / 2));
- }
-
- ///
- /// 以旋转点为原点,旋转文字
- ///
- /// 绘图图元
- /// 文本
- /// 字体
- /// 填充
- /// 旋转点
- /// 布局方式
- /// 角度
- public static void DrawString(this Graphics g, string text, Font font, Brush brush, PointF rotatePoint, StringFormat format, float angle)
- {
- if (text.IsNullOrEmpty()) return;
- // Save the matrix
- Matrix mtxSave = g.Transform;
- Matrix mtxRotate = g.Transform;
- mtxRotate.RotateAt(angle, rotatePoint);
- g.Transform = mtxRotate;
- g.DrawString(text, font, brush, rotatePoint, format);
-
- // Reset the matrix
- g.Transform = mtxSave;
- }
-
- ///
- /// 绘制字符串
- ///
- /// 绘图图元
- /// 文字
- /// 字体
- /// 颜色
- /// 旋转点
- /// 格式
- /// 角度
- public static void DrawString(this Graphics g, string text, Font font, Color color, PointF rotatePoint, StringFormat format, float angle)
- {
- if (text.IsNullOrEmpty()) return;
- using Brush br = color.Brush();
- g.DrawString(text, font, br, rotatePoint, format, angle);
- }
-
- ///
- /// 绘制根据矩形旋转文本
- ///
- /// 绘图图元
- /// 文本
- /// 字体
- /// 填充
- /// 局部矩形
- /// 布局方式
- /// 角度
- public static void DrawString(this Graphics g, string text, Font font, Brush brush, RectangleF rect, StringFormat format, float angle)
- {
- if (text.IsNullOrEmpty()) return;
- g.DrawStringRotateAtCenter(text, font, brush, rect.Center(), angle);
- }
-
///
/// 绘制两点连线
///
diff --git a/SunnyUI/Controls/UINavMenu.cs b/SunnyUI/Controls/UINavMenu.cs
index 8ded24ae..dd245665 100644
--- a/SunnyUI/Controls/UINavMenu.cs
+++ b/SunnyUI/Controls/UINavMenu.cs
@@ -767,7 +767,7 @@ namespace Sunny.UI
if (MenuHelper[e.Node] != null)
{
- using StringFormat alignment = GDI.SetAlignment();
+ using StringFormat alignment = GDI.SetCenterAlignment();
if (MenuHelper[e.Node].TipsCustom)
{
e.Graphics.FillEllipse(MenuHelper[e.Node].TipsBackColor, tipsLeft, tipsTop, sfMax, sfMax);