* UIStyle: 增加属性以期控件跟随窗体缩放
This commit is contained in:
parent
d11e4d4a5e
commit
696c36c9e9
Binary file not shown.
@ -33,6 +33,12 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
|
@ -11,6 +11,12 @@ namespace Sunny.UI
|
|||||||
private ContentAlignment m_rotatePointAlignment = ContentAlignment.MiddleCenter;
|
private ContentAlignment m_rotatePointAlignment = ContentAlignment.MiddleCenter;
|
||||||
private ContentAlignment m_textAlignment = ContentAlignment.MiddleLeft;
|
private ContentAlignment m_textAlignment = ContentAlignment.MiddleLeft;
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ namespace Sunny.UI
|
|||||||
[DefaultEvent("Click")]
|
[DefaultEvent("Click")]
|
||||||
[DefaultProperty("Symbol")]
|
[DefaultProperty("Symbol")]
|
||||||
[ToolboxItem(true)]
|
[ToolboxItem(true)]
|
||||||
public sealed class UIAvatar : UIControl, ISymbol
|
public sealed class UIAvatar : UIControl, ISymbol, IControlScale
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 头像图标类型
|
/// 头像图标类型
|
||||||
@ -351,5 +351,10 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
PaintAgain?.Invoke(this, e);
|
PaintAgain?.Invoke(this, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetControlScale(float scale)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -42,6 +42,12 @@ namespace Sunny.UI
|
|||||||
BackColor = UIStyles.Blue.ContextMenuColor;
|
BackColor = UIStyles.Blue.ContextMenuColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
[Browsable(false), DefaultValue(false)]
|
[Browsable(false), DefaultValue(false)]
|
||||||
public bool IsScaled { get; set; }
|
public bool IsScaled { get; set; }
|
||||||
|
|
||||||
|
@ -49,6 +49,26 @@ namespace Sunny.UI
|
|||||||
base.MinimumSize = new Size(1, 1);
|
base.MinimumSize = new Size(1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
protected bool selected;
|
protected bool selected;
|
||||||
|
|
||||||
[Browsable(false), DefaultValue(false)]
|
[Browsable(false), DefaultValue(false)]
|
||||||
|
@ -100,6 +100,26 @@ namespace Sunny.UI
|
|||||||
HorizontalScrollBar.VisibleChanged += HorizontalScrollBar_VisibleChanged;
|
HorizontalScrollBar.VisibleChanged += HorizontalScrollBar_VisibleChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
|
@ -44,6 +44,26 @@ namespace Sunny.UI
|
|||||||
private ContentAlignment textAlign = ContentAlignment.MiddleCenter;
|
private ContentAlignment textAlign = ContentAlignment.MiddleCenter;
|
||||||
private Color foreColor = UIFontColor.Primary;
|
private Color foreColor = UIFontColor.Primary;
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 主题样式
|
/// 主题样式
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -342,6 +342,12 @@ namespace Sunny.UI
|
|||||||
{
|
{
|
||||||
private UIScrollBar bar;
|
private UIScrollBar bar;
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tag字符串
|
/// Tag字符串
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
* 2022-03-19: V3.1.1 重构主题配色
|
* 2022-03-19: V3.1.1 重构主题配色
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
@ -42,6 +43,26 @@ namespace Sunny.UI
|
|||||||
foreColor = UIStyles.Blue.LabelForeColor;
|
foreColor = UIStyles.Blue.LabelForeColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int angle;
|
private int angle;
|
||||||
|
|
||||||
[DefaultValue(0), Category("SunnyUI"), Description("居中时旋转角度")]
|
[DefaultValue(0), Category("SunnyUI"), Description("居中时旋转角度")]
|
||||||
@ -167,6 +188,26 @@ namespace Sunny.UI
|
|||||||
base.LinkColor = linkColor = UIColor.Blue;
|
base.LinkColor = linkColor = UIColor.Blue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
|
@ -609,6 +609,12 @@ namespace Sunny.UI
|
|||||||
{
|
{
|
||||||
private UIScrollBar bar;
|
private UIScrollBar bar;
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tag字符串
|
/// Tag字符串
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -29,7 +29,7 @@ namespace Sunny.UI
|
|||||||
[ToolboxItem(true)]
|
[ToolboxItem(true)]
|
||||||
[DefaultEvent("Click")]
|
[DefaultEvent("Click")]
|
||||||
[DefaultProperty("Text")]
|
[DefaultProperty("Text")]
|
||||||
public class UIMarkLabel : UILabel
|
public sealed class UIMarkLabel : UILabel
|
||||||
{
|
{
|
||||||
public UIMarkLabel()
|
public UIMarkLabel()
|
||||||
{
|
{
|
||||||
|
@ -64,6 +64,26 @@ namespace Sunny.UI
|
|||||||
selectedHighColor = UIStyles.Blue.NavBarMenuSelectedColor;
|
selectedHighColor = UIStyles.Blue.NavBarMenuSelectedColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
|
@ -47,6 +47,9 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
private readonly UIScrollBar Bar = new UIScrollBar();
|
private readonly UIScrollBar Bar = new UIScrollBar();
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
public UINavMenu()
|
public UINavMenu()
|
||||||
{
|
{
|
||||||
SetStyle(ControlStyles.DoubleBuffer |
|
SetStyle(ControlStyles.DoubleBuffer |
|
||||||
@ -87,6 +90,23 @@ namespace Sunny.UI
|
|||||||
selectedHighColor = UIStyles.Blue.NavMenuMenuSelectedColor;
|
selectedHighColor = UIStyles.Blue.NavMenuMenuSelectedColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Description("滚动条填充颜色"), Category("SunnyUI")]
|
[Description("滚动条填充颜色"), Category("SunnyUI")]
|
||||||
[DefaultValue(typeof(Color), "56, 56, 56")]
|
[DefaultValue(typeof(Color), "56, 56, 56")]
|
||||||
public Color ScrollFillColor
|
public Color ScrollFillColor
|
||||||
|
@ -334,30 +334,48 @@ namespace Sunny.UI
|
|||||||
return CreateTabIfNotExists(new NavMenuItem(guid));
|
return CreateTabIfNotExists(new NavMenuItem(guid));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SelectPage(int pageIndex)
|
public bool SelectPage(int pageIndex)
|
||||||
{
|
{
|
||||||
if (pageIndex < 0) return;
|
if (pageIndex < 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var item in PageItems)
|
foreach (var item in PageItems)
|
||||||
{
|
{
|
||||||
if (item.Value.PageIndex == pageIndex && item.Key != null)
|
if (item.Value.PageIndex == pageIndex && item.Key != null)
|
||||||
{
|
{
|
||||||
if (tabControl.TabPages.Contains(item.Key))
|
if (tabControl.TabPages.Contains(item.Key))
|
||||||
|
{
|
||||||
tabControl.SelectTab(item.Key);
|
tabControl.SelectTab(item.Key);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SelectPage(Guid guid)
|
public bool SelectPage(Guid guid)
|
||||||
{
|
{
|
||||||
if (guid == Guid.Empty) return;
|
if (guid == Guid.Empty)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var item in PageItems)
|
foreach (var item in PageItems)
|
||||||
{
|
{
|
||||||
if (item.Value.PageGuid == guid && item.Key != null)
|
if (item.Value.PageGuid == guid && item.Key != null)
|
||||||
{
|
{
|
||||||
if (tabControl.TabPages.Contains(item.Key))
|
if (tabControl.TabPages.Contains(item.Key))
|
||||||
|
{
|
||||||
tabControl.SelectTab(item.Key);
|
tabControl.SelectTab(item.Key);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UIPage GetPage(int pageIndex)
|
public UIPage GetPage(int pageIndex)
|
||||||
|
@ -32,7 +32,7 @@ namespace Sunny.UI
|
|||||||
[ToolboxItem(true)]
|
[ToolboxItem(true)]
|
||||||
[DefaultEvent("Click")]
|
[DefaultEvent("Click")]
|
||||||
[DefaultProperty("Text")]
|
[DefaultProperty("Text")]
|
||||||
public class UISmoothLabel : Label, IStyleInterface
|
public sealed class UISmoothLabel : Label, IStyleInterface
|
||||||
{
|
{
|
||||||
public UISmoothLabel()
|
public UISmoothLabel()
|
||||||
{
|
{
|
||||||
@ -48,6 +48,9 @@ namespace Sunny.UI
|
|||||||
Size = new Size(300, 60);
|
Size = new Size(300, 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
protected override void Dispose(bool disposing)
|
protected override void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
if (disposing)
|
if (disposing)
|
||||||
@ -60,6 +63,23 @@ namespace Sunny.UI
|
|||||||
base.Dispose(disposing);
|
base.Dispose(disposing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private PointF point;
|
private PointF point;
|
||||||
private SizeF drawSize;
|
private SizeF drawSize;
|
||||||
private Pen drawPen;
|
private Pen drawPen;
|
||||||
@ -103,7 +123,7 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void SetStyleCustom(bool needRefresh = true)
|
private void SetStyleCustom(bool needRefresh = true)
|
||||||
{
|
{
|
||||||
_style = UIStyle.Custom;
|
_style = UIStyle.Custom;
|
||||||
if (needRefresh) Invalidate();
|
if (needRefresh) Invalidate();
|
||||||
@ -129,7 +149,7 @@ namespace Sunny.UI
|
|||||||
[Description("获取或设置可以自定义主题风格"), Category("SunnyUI")]
|
[Description("获取或设置可以自定义主题风格"), Category("SunnyUI")]
|
||||||
public bool StyleCustomMode { get; set; }
|
public bool StyleCustomMode { get; set; }
|
||||||
|
|
||||||
public virtual void SetStyleColor(UIBaseStyle uiColor)
|
public void SetStyleColor(UIBaseStyle uiColor)
|
||||||
{
|
{
|
||||||
foreColor = uiColor.SmoothLabelForeColor;
|
foreColor = uiColor.SmoothLabelForeColor;
|
||||||
rectColor = uiColor.SmoothLabelRectColor;
|
rectColor = uiColor.SmoothLabelRectColor;
|
||||||
@ -163,7 +183,7 @@ namespace Sunny.UI
|
|||||||
Invalidate();
|
Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Color rectColor;
|
private Color rectColor;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 边框颜色
|
/// 边框颜色
|
||||||
|
@ -26,7 +26,7 @@ using System.Windows.Forms;
|
|||||||
|
|
||||||
namespace Sunny.UI
|
namespace Sunny.UI
|
||||||
{
|
{
|
||||||
public class UISplitContainer : SplitContainer, IStyleInterface
|
public sealed class UISplitContainer : SplitContainer, IStyleInterface
|
||||||
{
|
{
|
||||||
private enum UIMouseType
|
private enum UIMouseType
|
||||||
{
|
{
|
||||||
@ -68,6 +68,9 @@ namespace Sunny.UI
|
|||||||
private UIMouseType _uiMouseType;
|
private UIMouseType _uiMouseType;
|
||||||
private readonly object EventCollapseClick = new object();
|
private readonly object EventCollapseClick = new object();
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
public UISplitContainer()
|
public UISplitContainer()
|
||||||
{
|
{
|
||||||
SetStyle(ControlStyles.UserPaint |
|
SetStyle(ControlStyles.UserPaint |
|
||||||
@ -79,7 +82,24 @@ namespace Sunny.UI
|
|||||||
Version = UIGlobal.Version;
|
Version = UIGlobal.Version;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void SetStyleCustom(bool needRefresh = true)
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetStyleCustom(bool needRefresh = true)
|
||||||
{
|
{
|
||||||
_style = UIStyle.Custom;
|
_style = UIStyle.Custom;
|
||||||
if (needRefresh) Invalidate();
|
if (needRefresh) Invalidate();
|
||||||
@ -163,9 +183,9 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual int DefaultCollapseWidth => 80;
|
private int DefaultCollapseWidth => 80;
|
||||||
|
|
||||||
protected virtual int DefaultArrowWidth => 24;
|
private int DefaultArrowWidth => 24;
|
||||||
|
|
||||||
private Rectangle CollapseRect
|
private Rectangle CollapseRect
|
||||||
{
|
{
|
||||||
@ -227,7 +247,7 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected UIStyle _style = UIStyle.Blue;
|
private UIStyle _style = UIStyle.Blue;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 主题样式
|
/// 主题样式
|
||||||
@ -317,7 +337,7 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnCollapseClick(EventArgs e)
|
private void OnCollapseClick(EventArgs e)
|
||||||
{
|
{
|
||||||
SplitPanelState = SplitPanelState == UISplitPanelState.Collapsed ?
|
SplitPanelState = SplitPanelState == UISplitPanelState.Collapsed ?
|
||||||
UISplitPanelState.Expanded : UISplitPanelState.Collapsed;
|
UISplitPanelState.Expanded : UISplitPanelState.Collapsed;
|
||||||
@ -384,7 +404,7 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Point[] GetHandlePoints()
|
private Point[] GetHandlePoints()
|
||||||
{
|
{
|
||||||
bool bCollapsed = SplitPanelState == UISplitPanelState.Collapsed;
|
bool bCollapsed = SplitPanelState == UISplitPanelState.Collapsed;
|
||||||
|
|
||||||
|
@ -72,6 +72,26 @@ namespace Sunny.UI
|
|||||||
_fillColor = UIStyles.Blue.TabControlBackColor;
|
_fillColor = UIStyles.Blue.TabControlBackColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ConcurrentDictionary<TabPage, string> TipsTexts = new ConcurrentDictionary<TabPage, string>();
|
private ConcurrentDictionary<TabPage, string> TipsTexts = new ConcurrentDictionary<TabPage, string>();
|
||||||
|
|
||||||
public void SetTipsText(TabPage tabPage, string tipsText)
|
public void SetTipsText(TabPage tabPage, string tipsText)
|
||||||
@ -192,9 +212,9 @@ namespace Sunny.UI
|
|||||||
[Description("是否禁用Ctrl+Tab"), Category("SunnyUI")]
|
[Description("是否禁用Ctrl+Tab"), Category("SunnyUI")]
|
||||||
public bool ForbidCtrlTab { get; set; } = true;
|
public bool ForbidCtrlTab { get; set; } = true;
|
||||||
|
|
||||||
public void SelectPage(int pageIndex) => Helper.SelectPage(pageIndex);
|
public bool SelectPage(int pageIndex) => Helper.SelectPage(pageIndex);
|
||||||
|
|
||||||
public void SelectPage(Guid pageGuid) => Helper.SelectPage(pageGuid);
|
public bool SelectPage(Guid pageGuid) => Helper.SelectPage(pageGuid);
|
||||||
|
|
||||||
public void AddPage(UIPage page) => Helper.AddPage(page);
|
public void AddPage(UIPage page) => Helper.AddPage(page);
|
||||||
|
|
||||||
|
@ -50,6 +50,26 @@ namespace Sunny.UI
|
|||||||
_fillColor = UIStyles.Blue.TabControlBackColor;
|
_fillColor = UIStyles.Blue.TabControlBackColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
|
@ -21,20 +21,27 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Drawing;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace Sunny.UI
|
namespace Sunny.UI
|
||||||
{
|
{
|
||||||
public class UITableLayoutPanel : TableLayoutPanel, IStyleInterface
|
public sealed class UITableLayoutPanel : TableLayoutPanel, IStyleInterface
|
||||||
{
|
{
|
||||||
public UITableLayoutPanel()
|
public UITableLayoutPanel()
|
||||||
{
|
{
|
||||||
Version = UIGlobal.Version;
|
Version = UIGlobal.Version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
public void SetDPIScale()
|
public void SetDPIScale()
|
||||||
{
|
{
|
||||||
if (!IsScaled)
|
if (!IsScaled)
|
||||||
@ -66,7 +73,7 @@ namespace Sunny.UI
|
|||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected UIStyle _style = UIStyle.Blue;
|
private UIStyle _style = UIStyle.Blue;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 主题样式
|
/// 主题样式
|
||||||
|
@ -50,11 +50,15 @@ namespace Sunny.UI
|
|||||||
SetStyleFlags(true, false);
|
SetStyleFlags(true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
[Browsable(false), DefaultValue(false)]
|
[Browsable(false), DefaultValue(false)]
|
||||||
public bool IsScaled { get; set; }
|
public bool IsScaled { get; set; }
|
||||||
|
|
||||||
public virtual void SetDPIScale()
|
public virtual void SetDPIScale()
|
||||||
{
|
{
|
||||||
|
if (DesignMode) return;
|
||||||
if (!IsScaled)
|
if (!IsScaled)
|
||||||
{
|
{
|
||||||
this.SetDPIScaleFont();
|
this.SetDPIScaleFont();
|
||||||
@ -341,10 +345,26 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
protected override void OnVisibleChanged(EventArgs e)
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnVisibleChanged(e);
|
base.OnVisibleChanged(e);
|
||||||
if (AutoScaleMode == AutoScaleMode.Font) AutoScaleMode = AutoScaleMode.None;
|
if (AutoScaleMode == AutoScaleMode.Font)
|
||||||
|
{
|
||||||
|
AutoScaleMode = AutoScaleMode.None;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnPaint(PaintEventArgs e)
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
|
@ -82,6 +82,9 @@ namespace Sunny.UI
|
|||||||
titleForeColor = UIStyles.Blue.FormTitleForeColor;
|
titleForeColor = UIStyles.Blue.FormTitleForeColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
@ -112,6 +115,27 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
[Description("设计界面大小"), Category("SunnyUI")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
private void SetControlScale()
|
||||||
|
{
|
||||||
|
if (ForbidControlScale) return;
|
||||||
|
if (!UIStyles.DPIScale || !UIStyles.ControlScale) return;
|
||||||
|
if (DesignedRect.Width == 0 || DesignedRect.Height == 0) return;
|
||||||
|
if (Width == 0 || Height == 0) return;
|
||||||
|
float scale = Math.Min(Width * 1.0f / DesignedRect.Width, Height * 1.0f / DesignedRect.Height);
|
||||||
|
if (scale.EqualsFloat(0)) return;
|
||||||
|
foreach (Control control in this.GetAllDPIScaleControls())
|
||||||
|
{
|
||||||
|
if (control is IStyleInterface)
|
||||||
|
{
|
||||||
|
UIDPIScale.SetControlScale(control, scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void ResetDPIScale()
|
public void ResetDPIScale()
|
||||||
{
|
{
|
||||||
IsScaled = false;
|
IsScaled = false;
|
||||||
@ -1220,6 +1244,7 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
public void SetStyle(UIStyle style)
|
public void SetStyle(UIStyle style)
|
||||||
{
|
{
|
||||||
|
if (DesignMode) return;
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
UIStyleHelper.SetChildUIStyle(this, style);
|
UIStyleHelper.SetChildUIStyle(this, style);
|
||||||
|
|
||||||
@ -1267,6 +1292,7 @@ namespace Sunny.UI
|
|||||||
protected override void OnSizeChanged(EventArgs e)
|
protected override void OnSizeChanged(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnSizeChanged(e);
|
base.OnSizeChanged(e);
|
||||||
|
SetControlScale();
|
||||||
CalcSystemBoxPos();
|
CalcSystemBoxPos();
|
||||||
|
|
||||||
if (isShow)
|
if (isShow)
|
||||||
@ -1300,6 +1326,15 @@ namespace Sunny.UI
|
|||||||
SetRadius();
|
SetRadius();
|
||||||
isShow = true;
|
isShow = true;
|
||||||
SetDPIScale();
|
SetDPIScale();
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this); ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -1990,18 +2025,43 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
private UIForm SetDefaultTabControl()
|
private UIForm SetDefaultTabControl()
|
||||||
{
|
{
|
||||||
if (MainTabControl == null)
|
List<UITabControl> ctrls = this.GetControls<UITabControl>();
|
||||||
|
if (ctrls.Count == 1)
|
||||||
{
|
{
|
||||||
List<UITabControl> ctrls = this.GetControls<UITabControl>();
|
if (MainTabControl == null)
|
||||||
if (ctrls.Count == 1) MainTabControl = ctrls[0];
|
{
|
||||||
|
MainTabControl = ctrls[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
List<UINavMenu> Menus = this.GetControls<UINavMenu>();
|
||||||
|
if (Menus.Count == 1 && Menus[0].TabControl == null)
|
||||||
|
{
|
||||||
|
Menus[0].TabControl = ctrls[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
List<UINavBar> Bars = this.GetControls<UINavBar>();
|
||||||
|
if (Bars.Count == 1 && Bars[0].TabControl == null)
|
||||||
|
{
|
||||||
|
Bars[0].TabControl = ctrls[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void SelectPage(int pageIndex) => SetDefaultTabControl().MainTabControl?.SelectPage(pageIndex);
|
public virtual bool SelectPage(int pageIndex)
|
||||||
|
{
|
||||||
|
SetDefaultTabControl();
|
||||||
|
if (MainTabControl == null) return false;
|
||||||
|
return MainTabControl.SelectPage(pageIndex);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void SelectPage(Guid guid) => SetDefaultTabControl().MainTabControl?.SelectPage(guid);
|
public virtual bool SelectPage(Guid guid)
|
||||||
|
{
|
||||||
|
SetDefaultTabControl();
|
||||||
|
if (MainTabControl == null) return false;
|
||||||
|
return MainTabControl.SelectPage(guid);
|
||||||
|
}
|
||||||
|
|
||||||
public bool RemovePage(int pageIndex) => MainTabControl?.RemovePage(pageIndex) ?? false;
|
public bool RemovePage(int pageIndex) => MainTabControl?.RemovePage(pageIndex) ?? false;
|
||||||
|
|
||||||
|
@ -34,9 +34,9 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
UIPage AddPage(UIPage page);
|
UIPage AddPage(UIPage page);
|
||||||
|
|
||||||
void SelectPage(int pageIndex);
|
bool SelectPage(int pageIndex);
|
||||||
|
|
||||||
void SelectPage(Guid guid);
|
bool SelectPage(Guid guid);
|
||||||
|
|
||||||
UIPage GetPage(int pageIndex);
|
UIPage GetPage(int pageIndex);
|
||||||
|
|
||||||
@ -57,7 +57,9 @@ namespace Sunny.UI
|
|||||||
bool SetParamToPage(int toPageIndex, int fromPageIndex, params object[] objects);
|
bool SetParamToPage(int toPageIndex, int fromPageIndex, params object[] objects);
|
||||||
|
|
||||||
bool SetParamToPage(Guid toPageGuid, Guid fromPageGuid, params object[] objects);
|
bool SetParamToPage(Guid toPageGuid, Guid fromPageGuid, params object[] objects);
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
void Final();
|
void Final();
|
||||||
|
|
||||||
T GetPage<T>() where T : UIPage;
|
T GetPage<T>() where T : UIPage;
|
||||||
|
@ -35,11 +35,12 @@ namespace Sunny.UI
|
|||||||
Aside.TabControl = MainTabControl;
|
Aside.TabControl = MainTabControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SelectPage(int pageIndex)
|
public override bool SelectPage(int pageIndex)
|
||||||
{
|
{
|
||||||
base.SelectPage(pageIndex);
|
bool result = base.SelectPage(pageIndex);
|
||||||
TreeNode node = Aside.GetTreeNode(pageIndex);
|
TreeNode node = Aside.GetTreeNode(pageIndex);
|
||||||
if (node != null) Aside.SelectedNode = node;
|
if (node != null) Aside.SelectedNode = node;
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -37,11 +37,12 @@ namespace Sunny.UI
|
|||||||
Aside.TabControl = MainTabControl;
|
Aside.TabControl = MainTabControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SelectPage(int pageIndex)
|
public override bool SelectPage(int pageIndex)
|
||||||
{
|
{
|
||||||
base.SelectPage(pageIndex);
|
bool result = base.SelectPage(pageIndex);
|
||||||
TreeNode node = Aside.GetTreeNode(pageIndex);
|
TreeNode node = Aside.GetTreeNode(pageIndex);
|
||||||
if (node != null) Aside.SelectedNode = node;
|
if (node != null) Aside.SelectedNode = node;
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -76,11 +76,33 @@ namespace Sunny.UI
|
|||||||
titleForeColor = UIStyles.Blue.PageTitleForeColor;
|
titleForeColor = UIStyles.Blue.PageTitleForeColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(false), Category("SunnyUI"), Description("禁止控件跟随窗体缩放")]
|
||||||
|
public bool ForbidControlScale { get; set; }
|
||||||
|
|
||||||
|
[Browsable(false), DefaultValue(typeof(Size), "0, 0")]
|
||||||
|
public ControlScaleInfo DesignedRect { get; private set; }
|
||||||
|
|
||||||
|
protected override void OnVisibleChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnVisibleChanged(e);
|
||||||
|
SetDesignedSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void SetDesignedSize()
|
||||||
|
{
|
||||||
|
if (DesignedRect.Width == 0 && DesignedRect.Height == 0)
|
||||||
|
{
|
||||||
|
DesignedRect = new ControlScaleInfo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public bool IsScaled { get; private set; }
|
public bool IsScaled { get; private set; }
|
||||||
|
|
||||||
public void SetDPIScale()
|
public void SetDPIScale()
|
||||||
{
|
{
|
||||||
|
if (DesignMode) return;
|
||||||
|
|
||||||
if (!IsScaled)
|
if (!IsScaled)
|
||||||
{
|
{
|
||||||
this.SetDPIScaleFont();
|
this.SetDPIScaleFont();
|
||||||
|
@ -105,5 +105,87 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int Calc(int size, float scale)
|
||||||
|
{
|
||||||
|
return (int)(size * scale + 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static void SetControlScale(Control control, float scale)
|
||||||
|
{
|
||||||
|
if (scale.EqualsFloat(0)) return;
|
||||||
|
|
||||||
|
if (control is IStyleInterface ctrl)
|
||||||
|
{
|
||||||
|
if (ctrl.ForbidControlScale)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (control is IControlScale sc)
|
||||||
|
{
|
||||||
|
sc.SetControlScale(scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (control.Dock == DockStyle.Fill)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var rect = ctrl.DesignedRect;
|
||||||
|
switch (control.Dock)
|
||||||
|
{
|
||||||
|
case DockStyle.None:
|
||||||
|
control.Height = Calc(rect.Height, scale);
|
||||||
|
control.Width = Calc(rect.Width, scale);
|
||||||
|
|
||||||
|
if (control.Parent != null)
|
||||||
|
{
|
||||||
|
if ((control.Anchor & AnchorStyles.Left) == AnchorStyles.Left)
|
||||||
|
{
|
||||||
|
control.Left = Calc(rect.XInterval, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((control.Anchor & AnchorStyles.Right) == AnchorStyles.Right)
|
||||||
|
{
|
||||||
|
int right = Calc(rect.XInterval, scale);
|
||||||
|
control.Left = control.Parent.Width - right - control.Width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((control.Anchor & AnchorStyles.Top) == AnchorStyles.Top)
|
||||||
|
{
|
||||||
|
if (control.Parent is UIForm form && form.ShowTitle)
|
||||||
|
control.Top = Calc(rect.YInterval - form.TitleHeight, scale) + form.TitleHeight;
|
||||||
|
else
|
||||||
|
control.Top = Calc(rect.YInterval, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((control.Anchor & AnchorStyles.Bottom) == AnchorStyles.Bottom)
|
||||||
|
{
|
||||||
|
int bottom = Calc(rect.YInterval, scale);
|
||||||
|
control.Top = control.Parent.Height - bottom - control.Height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case DockStyle.Top:
|
||||||
|
control.Height = Calc(rect.Height, scale);
|
||||||
|
break;
|
||||||
|
case DockStyle.Bottom:
|
||||||
|
control.Height = Calc(rect.Height, scale);
|
||||||
|
break;
|
||||||
|
case DockStyle.Left:
|
||||||
|
control.Width = Calc(rect.Width, scale);
|
||||||
|
break;
|
||||||
|
case DockStyle.Right:
|
||||||
|
control.Width = Calc(rect.Width, scale);
|
||||||
|
break;
|
||||||
|
case DockStyle.Fill:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
* 2021-10-16: V3.0.8 增加系统DPI缩放自适应
|
* 2021-10-16: V3.0.8 增加系统DPI缩放自适应
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@ -61,6 +59,53 @@ namespace Sunny.UI
|
|||||||
bool IsScaled { get; }
|
bool IsScaled { get; }
|
||||||
|
|
||||||
void SetDPIScale();
|
void SetDPIScale();
|
||||||
|
|
||||||
|
ControlScaleInfo DesignedRect { get; }
|
||||||
|
|
||||||
|
bool ForbidControlScale { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IControlScale
|
||||||
|
{
|
||||||
|
void SetControlScale(float scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct ControlScaleInfo
|
||||||
|
{
|
||||||
|
public int XInterval { get; }
|
||||||
|
public int YInterval { get; }
|
||||||
|
public int Width { get; }
|
||||||
|
public int Height { get; }
|
||||||
|
|
||||||
|
public ControlScaleInfo(Control control)
|
||||||
|
{
|
||||||
|
Width = control.Width;
|
||||||
|
Height = control.Height;
|
||||||
|
XInterval = 0;
|
||||||
|
YInterval = 0;
|
||||||
|
if (control.Parent != null)
|
||||||
|
{
|
||||||
|
if ((control.Anchor & AnchorStyles.Left) == AnchorStyles.Left)
|
||||||
|
{
|
||||||
|
XInterval = control.Left;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((control.Anchor & AnchorStyles.Right) == AnchorStyles.Right)
|
||||||
|
{
|
||||||
|
XInterval = control.Parent.Width - control.Right;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((control.Anchor & AnchorStyles.Top) == AnchorStyles.Top)
|
||||||
|
{
|
||||||
|
YInterval = control.Top;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((control.Anchor & AnchorStyles.Bottom) == AnchorStyles.Bottom)
|
||||||
|
{
|
||||||
|
YInterval = control.Parent.Height - control.Bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -147,299 +192,6 @@ namespace Sunny.UI
|
|||||||
Colorful = 999
|
Colorful = 999
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 主题样式管理类
|
|
||||||
/// </summary>
|
|
||||||
public static class UIStyles
|
|
||||||
{
|
|
||||||
public static bool DPIScale { get; set; }
|
|
||||||
|
|
||||||
public static float FontSize { get; set; } = 12;
|
|
||||||
|
|
||||||
public static List<UIStyle> PopularStyles()
|
|
||||||
{
|
|
||||||
List<UIStyle> styles = new List<UIStyle>();
|
|
||||||
foreach (UIStyle style in Enum.GetValues(typeof(UIStyle)))
|
|
||||||
{
|
|
||||||
if (style.Value() >= UIStyle.Blue.Value() && style.Value() < UIStyle.Colorful.Value())
|
|
||||||
{
|
|
||||||
styles.Add(style);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return styles;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 自定义
|
|
||||||
/// </summary>
|
|
||||||
private static readonly UIBaseStyle Custom = new UICustomStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 蓝
|
|
||||||
/// </summary>
|
|
||||||
public static readonly UIBaseStyle Blue = new UIBlueStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 橙
|
|
||||||
/// </summary>
|
|
||||||
public static readonly UIBaseStyle Orange = new UIOrangeStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 灰
|
|
||||||
/// </summary>
|
|
||||||
public static readonly UIBaseStyle Gray = new UIGrayStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 绿
|
|
||||||
/// </summary>
|
|
||||||
public static readonly UIBaseStyle Green = new UIGreenStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 红
|
|
||||||
/// </summary>
|
|
||||||
public static readonly UIBaseStyle Red = new UIRedStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 深蓝
|
|
||||||
/// </summary>
|
|
||||||
public static readonly UIBaseStyle DarkBlue = new UIDarkBlueStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 黑
|
|
||||||
/// </summary>
|
|
||||||
public static readonly UIBaseStyle Black = new UIBlackStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 紫
|
|
||||||
/// </summary>
|
|
||||||
public static readonly UIBaseStyle Purple = new UIPurpleStyle();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 多彩
|
|
||||||
/// </summary>
|
|
||||||
private static readonly UIColorfulStyle Colorful = new UIColorfulStyle();
|
|
||||||
|
|
||||||
public static void InitColorful(Color styleColor, Color foreColor)
|
|
||||||
{
|
|
||||||
Colorful.Init(styleColor, foreColor);
|
|
||||||
Style = UIStyle.Colorful;
|
|
||||||
SetStyle(Style);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static readonly ConcurrentDictionary<UIStyle, UIBaseStyle> Styles = new ConcurrentDictionary<UIStyle, UIBaseStyle>();
|
|
||||||
private static readonly ConcurrentDictionary<Guid, UIForm> Forms = new ConcurrentDictionary<Guid, UIForm>();
|
|
||||||
private static readonly ConcurrentDictionary<Guid, UIPage> Pages = new ConcurrentDictionary<Guid, UIPage>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 菜单颜色集合
|
|
||||||
/// </summary>
|
|
||||||
public static readonly ConcurrentDictionary<UIMenuStyle, UIMenuColor> MenuColors = new ConcurrentDictionary<UIMenuStyle, UIMenuColor>();
|
|
||||||
|
|
||||||
static UIStyles()
|
|
||||||
{
|
|
||||||
AddStyle(Custom);
|
|
||||||
AddStyle(Blue);
|
|
||||||
AddStyle(Orange);
|
|
||||||
AddStyle(Gray);
|
|
||||||
AddStyle(Green);
|
|
||||||
AddStyle(Red);
|
|
||||||
AddStyle(DarkBlue);
|
|
||||||
|
|
||||||
AddStyle(new UIBaseStyle().Init(UIColor.LayuiGreen, UIStyle.LayuiGreen, Color.White, UIFontColor.Primary));
|
|
||||||
AddStyle(new UIBaseStyle().Init(UIColor.LayuiRed, UIStyle.LayuiRed, Color.White, UIFontColor.Primary));
|
|
||||||
AddStyle(new UIBaseStyle().Init(UIColor.LayuiOrange, UIStyle.LayuiOrange, Color.White, UIFontColor.Primary));
|
|
||||||
|
|
||||||
AddStyle(Black);
|
|
||||||
AddStyle(Purple);
|
|
||||||
|
|
||||||
AddStyle(Colorful);
|
|
||||||
|
|
||||||
MenuColors.TryAdd(UIMenuStyle.Custom, new UIMenuCustomColor());
|
|
||||||
MenuColors.TryAdd(UIMenuStyle.Black, new UIMenuBlackColor());
|
|
||||||
MenuColors.TryAdd(UIMenuStyle.White, new UIMenuWhiteColor());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 主题样式整数值
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="style">主题样式</param>
|
|
||||||
/// <returns>整数值</returns>
|
|
||||||
public static int Value(this UIStyle style)
|
|
||||||
{
|
|
||||||
return (int)style;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 注册窗体
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="guid">GUID</param>
|
|
||||||
/// <param name="form">窗体</param>
|
|
||||||
public static bool Register(Guid guid, UIForm form)
|
|
||||||
{
|
|
||||||
if (!Forms.ContainsKey(guid))
|
|
||||||
{
|
|
||||||
Forms.TryAddOrUpdate(guid, form);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 注册页面
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="guid">GUID</param>
|
|
||||||
/// <param name="page">页面</param>
|
|
||||||
public static bool Register(Guid guid, UIPage page)
|
|
||||||
{
|
|
||||||
if (!Pages.ContainsKey(guid))
|
|
||||||
{
|
|
||||||
Pages.TryAddOrUpdate(guid, page);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 注册窗体
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="form">窗体</param>
|
|
||||||
public static bool Register(this UIForm form)
|
|
||||||
{
|
|
||||||
if (!Forms.ContainsKey(form.Guid))
|
|
||||||
{
|
|
||||||
Forms.TryAddOrUpdate(form.Guid, form);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 注册页面
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="page">页面</param>
|
|
||||||
public static bool Register(this UIPage page)
|
|
||||||
{
|
|
||||||
if (!Pages.ContainsKey(page.Guid))
|
|
||||||
{
|
|
||||||
Pages.TryAddOrUpdate(page.Guid, page);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 反注册窗体
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="form">窗体</param>
|
|
||||||
public static void UnRegister(this UIForm form)
|
|
||||||
{
|
|
||||||
Forms.TryRemove(form.Guid, out _);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 反注册页面
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="page">页面</param>
|
|
||||||
public static void UnRegister(this UIPage page)
|
|
||||||
{
|
|
||||||
Pages.TryRemove(page.Guid, out _);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 反注册窗体、页面
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="guid">GUID</param>
|
|
||||||
public static void UnRegister(Guid guid)
|
|
||||||
{
|
|
||||||
if (Forms.ContainsKey(guid))
|
|
||||||
Forms.TryRemove(guid, out _);
|
|
||||||
|
|
||||||
if (Pages.ContainsKey(guid))
|
|
||||||
Pages.TryRemove(guid, out _);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取主题样式
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="style">主题样式名称</param>
|
|
||||||
/// <returns>主题样式</returns>
|
|
||||||
public static UIBaseStyle GetStyleColor(UIStyle style)
|
|
||||||
{
|
|
||||||
if (Styles.ContainsKey(style))
|
|
||||||
{
|
|
||||||
return Styles[style];
|
|
||||||
}
|
|
||||||
|
|
||||||
Style = UIStyle.Blue;
|
|
||||||
return Styles[Style];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static UIBaseStyle ActiveStyleColor => GetStyleColor(Style);
|
|
||||||
|
|
||||||
private static void AddStyle(UIBaseStyle uiColor)
|
|
||||||
{
|
|
||||||
if (Styles.ContainsKey(uiColor.Name))
|
|
||||||
{
|
|
||||||
MessageBox.Show(uiColor.Name + " is already exist.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Styles.TryAdd(uiColor.Name, uiColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 主题样式
|
|
||||||
/// </summary>
|
|
||||||
public static UIStyle Style { get; private set; } = UIStyle.Blue;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 设置主题样式
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="style">主题样式</param>
|
|
||||||
public static void SetStyle(UIStyle style)
|
|
||||||
{
|
|
||||||
Style = style;
|
|
||||||
|
|
||||||
foreach (var form in Forms.Values)
|
|
||||||
{
|
|
||||||
form.Style = style;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var page in Pages.Values)
|
|
||||||
{
|
|
||||||
page.Style = style;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void SetDPIScale()
|
|
||||||
{
|
|
||||||
foreach (var form in Forms.Values)
|
|
||||||
{
|
|
||||||
if (!UIDPIScale.DPIScaleIsOne())
|
|
||||||
form.SetDPIScale();
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var page in Pages.Values)
|
|
||||||
{
|
|
||||||
if (!UIDPIScale.DPIScaleIsOne())
|
|
||||||
page.SetDPIScale();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Translate()
|
|
||||||
{
|
|
||||||
foreach (var form in Forms.Values)
|
|
||||||
{
|
|
||||||
form.Translate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 主题颜色
|
/// 主题颜色
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -85,6 +85,12 @@ namespace Sunny.UI
|
|||||||
set => UIStyles.FontSize = value;
|
set => UIStyles.FontSize = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool ControlScale
|
||||||
|
{
|
||||||
|
get => UIStyles.ControlScale;
|
||||||
|
set => UIStyles.ControlScale = value;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 版本
|
/// 版本
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
342
SunnyUI/Style/UIStyles.cs
Normal file
342
SunnyUI/Style/UIStyles.cs
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
* SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
|
||||||
|
* CopyRight (C) 2012-2022 ShenYongHua(沈永华).
|
||||||
|
* QQ群:56829229 QQ:17612584 EMail:SunnyUI@QQ.Com
|
||||||
|
*
|
||||||
|
* Blog: https://www.cnblogs.com/yhuse
|
||||||
|
* Gitee: https://gitee.com/yhuse/SunnyUI
|
||||||
|
* GitHub: https://github.com/yhuse/SunnyUI
|
||||||
|
*
|
||||||
|
* SunnyUI.dll can be used for free under the GPL-3.0 license.
|
||||||
|
* If you use this code, please keep this note.
|
||||||
|
* 如果您使用此代码,请保留此说明。
|
||||||
|
******************************************************************************
|
||||||
|
* 文件名称: UIStyles.cs
|
||||||
|
* 文件说明: 主题样式管理类
|
||||||
|
* 当前版本: V3.1
|
||||||
|
* 创建日期: 2020-01-01
|
||||||
|
*
|
||||||
|
* 2020-01-01: V2.2.0 增加文件说明
|
||||||
|
* 2021-07-12: V3.0.5 增加紫色主题
|
||||||
|
* 2021-07-18: V3.0.5 增加多彩主题,以颜色深色,文字白色为主
|
||||||
|
* 2021-09-24: V3.0.7 修改默认字体的GdiCharSet
|
||||||
|
* 2021-10-16: V3.0.8 增加系统DPI缩放自适应
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Sunny.UI
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 主题样式管理类
|
||||||
|
/// </summary>
|
||||||
|
public static class UIStyles
|
||||||
|
{
|
||||||
|
public static bool DPIScale { get; set; }
|
||||||
|
|
||||||
|
public static bool ControlScale { get; set; }
|
||||||
|
|
||||||
|
public static float FontSize { get; set; } = 12;
|
||||||
|
|
||||||
|
public static List<UIStyle> PopularStyles()
|
||||||
|
{
|
||||||
|
List<UIStyle> styles = new List<UIStyle>();
|
||||||
|
foreach (UIStyle style in Enum.GetValues(typeof(UIStyle)))
|
||||||
|
{
|
||||||
|
if (style.Value() >= UIStyle.Blue.Value() && style.Value() < UIStyle.Colorful.Value())
|
||||||
|
{
|
||||||
|
styles.Add(style);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return styles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 自定义
|
||||||
|
/// </summary>
|
||||||
|
private static readonly UIBaseStyle Custom = new UICustomStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 蓝
|
||||||
|
/// </summary>
|
||||||
|
public static readonly UIBaseStyle Blue = new UIBlueStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 橙
|
||||||
|
/// </summary>
|
||||||
|
public static readonly UIBaseStyle Orange = new UIOrangeStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 灰
|
||||||
|
/// </summary>
|
||||||
|
public static readonly UIBaseStyle Gray = new UIGrayStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 绿
|
||||||
|
/// </summary>
|
||||||
|
public static readonly UIBaseStyle Green = new UIGreenStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 红
|
||||||
|
/// </summary>
|
||||||
|
public static readonly UIBaseStyle Red = new UIRedStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 深蓝
|
||||||
|
/// </summary>
|
||||||
|
public static readonly UIBaseStyle DarkBlue = new UIDarkBlueStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 黑
|
||||||
|
/// </summary>
|
||||||
|
public static readonly UIBaseStyle Black = new UIBlackStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 紫
|
||||||
|
/// </summary>
|
||||||
|
public static readonly UIBaseStyle Purple = new UIPurpleStyle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 多彩
|
||||||
|
/// </summary>
|
||||||
|
private static readonly UIColorfulStyle Colorful = new UIColorfulStyle();
|
||||||
|
|
||||||
|
public static void InitColorful(Color styleColor, Color foreColor)
|
||||||
|
{
|
||||||
|
Colorful.Init(styleColor, foreColor);
|
||||||
|
Style = UIStyle.Colorful;
|
||||||
|
SetStyle(Style);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly ConcurrentDictionary<UIStyle, UIBaseStyle> Styles = new ConcurrentDictionary<UIStyle, UIBaseStyle>();
|
||||||
|
private static readonly ConcurrentDictionary<Guid, UIForm> Forms = new ConcurrentDictionary<Guid, UIForm>();
|
||||||
|
private static readonly ConcurrentDictionary<Guid, UIPage> Pages = new ConcurrentDictionary<Guid, UIPage>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单颜色集合
|
||||||
|
/// </summary>
|
||||||
|
public static readonly ConcurrentDictionary<UIMenuStyle, UIMenuColor> MenuColors = new ConcurrentDictionary<UIMenuStyle, UIMenuColor>();
|
||||||
|
|
||||||
|
static UIStyles()
|
||||||
|
{
|
||||||
|
AddStyle(Custom);
|
||||||
|
AddStyle(Blue);
|
||||||
|
AddStyle(Orange);
|
||||||
|
AddStyle(Gray);
|
||||||
|
AddStyle(Green);
|
||||||
|
AddStyle(Red);
|
||||||
|
AddStyle(DarkBlue);
|
||||||
|
|
||||||
|
AddStyle(new UIBaseStyle().Init(UIColor.LayuiGreen, UIStyle.LayuiGreen, Color.White, UIFontColor.Primary));
|
||||||
|
AddStyle(new UIBaseStyle().Init(UIColor.LayuiRed, UIStyle.LayuiRed, Color.White, UIFontColor.Primary));
|
||||||
|
AddStyle(new UIBaseStyle().Init(UIColor.LayuiOrange, UIStyle.LayuiOrange, Color.White, UIFontColor.Primary));
|
||||||
|
|
||||||
|
AddStyle(Black);
|
||||||
|
AddStyle(Purple);
|
||||||
|
|
||||||
|
AddStyle(Colorful);
|
||||||
|
|
||||||
|
MenuColors.TryAdd(UIMenuStyle.Custom, new UIMenuCustomColor());
|
||||||
|
MenuColors.TryAdd(UIMenuStyle.Black, new UIMenuBlackColor());
|
||||||
|
MenuColors.TryAdd(UIMenuStyle.White, new UIMenuWhiteColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 主题样式整数值
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="style">主题样式</param>
|
||||||
|
/// <returns>整数值</returns>
|
||||||
|
public static int Value(this UIStyle style)
|
||||||
|
{
|
||||||
|
return (int)style;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 注册窗体
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="guid">GUID</param>
|
||||||
|
/// <param name="form">窗体</param>
|
||||||
|
public static bool Register(Guid guid, UIForm form)
|
||||||
|
{
|
||||||
|
if (!Forms.ContainsKey(guid))
|
||||||
|
{
|
||||||
|
Forms.TryAddOrUpdate(guid, form);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 注册页面
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="guid">GUID</param>
|
||||||
|
/// <param name="page">页面</param>
|
||||||
|
public static bool Register(Guid guid, UIPage page)
|
||||||
|
{
|
||||||
|
if (!Pages.ContainsKey(guid))
|
||||||
|
{
|
||||||
|
Pages.TryAddOrUpdate(guid, page);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 注册窗体
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="form">窗体</param>
|
||||||
|
public static bool Register(this UIForm form)
|
||||||
|
{
|
||||||
|
if (!Forms.ContainsKey(form.Guid))
|
||||||
|
{
|
||||||
|
Forms.TryAddOrUpdate(form.Guid, form);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 注册页面
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="page">页面</param>
|
||||||
|
public static bool Register(this UIPage page)
|
||||||
|
{
|
||||||
|
if (!Pages.ContainsKey(page.Guid))
|
||||||
|
{
|
||||||
|
Pages.TryAddOrUpdate(page.Guid, page);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<T> GetPages<T>() where T : UIPage
|
||||||
|
{
|
||||||
|
List<T> result = new List<T>();
|
||||||
|
foreach (var page in Pages)
|
||||||
|
{
|
||||||
|
if (page is T pg)
|
||||||
|
result.Add(pg);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 反注册窗体
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="form">窗体</param>
|
||||||
|
public static void UnRegister(this UIForm form)
|
||||||
|
{
|
||||||
|
Forms.TryRemove(form.Guid, out _);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 反注册页面
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="page">页面</param>
|
||||||
|
public static void UnRegister(this UIPage page)
|
||||||
|
{
|
||||||
|
Pages.TryRemove(page.Guid, out _);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 反注册窗体、页面
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="guid">GUID</param>
|
||||||
|
public static void UnRegister(Guid guid)
|
||||||
|
{
|
||||||
|
if (Forms.ContainsKey(guid))
|
||||||
|
Forms.TryRemove(guid, out _);
|
||||||
|
|
||||||
|
if (Pages.ContainsKey(guid))
|
||||||
|
Pages.TryRemove(guid, out _);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取主题样式
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="style">主题样式名称</param>
|
||||||
|
/// <returns>主题样式</returns>
|
||||||
|
public static UIBaseStyle GetStyleColor(UIStyle style)
|
||||||
|
{
|
||||||
|
if (Styles.ContainsKey(style))
|
||||||
|
{
|
||||||
|
return Styles[style];
|
||||||
|
}
|
||||||
|
|
||||||
|
Style = UIStyle.Blue;
|
||||||
|
return Styles[Style];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UIBaseStyle ActiveStyleColor => GetStyleColor(Style);
|
||||||
|
|
||||||
|
private static void AddStyle(UIBaseStyle uiColor)
|
||||||
|
{
|
||||||
|
if (Styles.ContainsKey(uiColor.Name))
|
||||||
|
{
|
||||||
|
MessageBox.Show(uiColor.Name + " is already exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Styles.TryAdd(uiColor.Name, uiColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 主题样式
|
||||||
|
/// </summary>
|
||||||
|
public static UIStyle Style { get; private set; } = UIStyle.Blue;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置主题样式
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="style">主题样式</param>
|
||||||
|
public static void SetStyle(UIStyle style)
|
||||||
|
{
|
||||||
|
Style = style;
|
||||||
|
|
||||||
|
foreach (var form in Forms.Values)
|
||||||
|
{
|
||||||
|
form.Style = style;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var page in Pages.Values)
|
||||||
|
{
|
||||||
|
page.Style = style;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetDPIScale()
|
||||||
|
{
|
||||||
|
if (!DPIScale) return;
|
||||||
|
|
||||||
|
foreach (var form in Forms.Values)
|
||||||
|
{
|
||||||
|
if (!UIDPIScale.DPIScaleIsOne())
|
||||||
|
form.SetDPIScale();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var page in Pages.Values)
|
||||||
|
{
|
||||||
|
if (!UIDPIScale.DPIScaleIsOne())
|
||||||
|
page.SetDPIScale();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Translate()
|
||||||
|
{
|
||||||
|
foreach (var form in Forms.Values)
|
||||||
|
{
|
||||||
|
form.Translate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user