* UIPage: 标题栏增加扩展按钮
This commit is contained in:
parent
1f479820b7
commit
21ed20c9e2
@ -32,6 +32,7 @@
|
||||
* 2022-08-25: V3.2.3 重构多页面框架传值:页面发送给框架 SendParamToFrame 函数
|
||||
* 2022-08-25: V3.2.3 重构多页面框架传值:页面发送给框架 SendParamToPage 函数
|
||||
* 2022-08-25: V3.2.3 重构多页面框架传值:接收框架、页面传值 ReceiveParams 事件
|
||||
* 2022-10-28: V3.2.6 标题栏增加扩展按钮
|
||||
******************************************************************************/
|
||||
|
||||
using System;
|
||||
@ -59,6 +60,21 @@ namespace Sunny.UI
|
||||
get; set;
|
||||
}
|
||||
|
||||
private bool extendBox;
|
||||
|
||||
[DefaultValue(false)]
|
||||
[Description("显示扩展按钮"), Category("SunnyUI")]
|
||||
public bool ExtendBox
|
||||
{
|
||||
get => extendBox;
|
||||
set
|
||||
{
|
||||
extendBox = showTitle && value;
|
||||
CalcSystemBoxPos();
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public UIPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
@ -379,7 +395,7 @@ namespace Sunny.UI
|
||||
ReturnFlag = true;
|
||||
return ReturnFlag;
|
||||
#else
|
||||
return IsAncestorSiteInDesignMode;
|
||||
return DesignMode || IsAncestorSiteInDesignMode;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -529,6 +545,9 @@ namespace Sunny.UI
|
||||
|
||||
public virtual void SetStyleColor(UIBaseStyle uiColor)
|
||||
{
|
||||
controlBoxForeColor = uiColor.FormControlBoxForeColor;
|
||||
controlBoxFillHoverColor = uiColor.FormControlBoxFillHoverColor;
|
||||
ControlBoxCloseFillHoverColor = uiColor.FormControlBoxCloseFillHoverColor;
|
||||
BackColor = uiColor.PageBackColor;
|
||||
_rectColor = uiColor.PageRectColor;
|
||||
ForeColor = uiColor.PageForeColor;
|
||||
@ -536,6 +555,24 @@ namespace Sunny.UI
|
||||
titleForeColor = uiColor.PageTitleForeColor;
|
||||
}
|
||||
|
||||
private Color controlBoxCloseFillHoverColor;
|
||||
/// <summary>
|
||||
/// 标题栏颜色
|
||||
/// </summary>
|
||||
[Description("标题栏关闭按钮移上背景颜色"), Category("SunnyUI"), DefaultValue(typeof(Color), "Red")]
|
||||
public Color ControlBoxCloseFillHoverColor
|
||||
{
|
||||
get => controlBoxCloseFillHoverColor;
|
||||
set
|
||||
{
|
||||
if (controlBoxCloseFillHoverColor != value)
|
||||
{
|
||||
controlBoxCloseFillHoverColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void AfterSetFillColor(Color color)
|
||||
{
|
||||
}
|
||||
@ -590,20 +627,130 @@ namespace Sunny.UI
|
||||
{
|
||||
if (InControlBox)
|
||||
{
|
||||
e.Graphics.FillRectangle(UIColor.Red, ControlBoxRect);
|
||||
e.Graphics.FillRectangle(ControlBoxCloseFillHoverColor, ControlBoxRect);
|
||||
}
|
||||
|
||||
e.Graphics.DrawLine(Color.White,
|
||||
e.Graphics.DrawLine(controlBoxForeColor,
|
||||
ControlBoxRect.Left + ControlBoxRect.Width / 2 - 5,
|
||||
ControlBoxRect.Top + ControlBoxRect.Height / 2 - 5,
|
||||
ControlBoxRect.Left + ControlBoxRect.Width / 2 + 5,
|
||||
ControlBoxRect.Top + ControlBoxRect.Height / 2 + 5);
|
||||
e.Graphics.DrawLine(Color.White,
|
||||
e.Graphics.DrawLine(controlBoxForeColor,
|
||||
ControlBoxRect.Left + ControlBoxRect.Width / 2 - 5,
|
||||
ControlBoxRect.Top + ControlBoxRect.Height / 2 + 5,
|
||||
ControlBoxRect.Left + ControlBoxRect.Width / 2 + 5,
|
||||
ControlBoxRect.Top + ControlBoxRect.Height / 2 - 5);
|
||||
}
|
||||
|
||||
if (ExtendBox)
|
||||
{
|
||||
if (InExtendBox)
|
||||
{
|
||||
e.Graphics.FillRectangle(ControlBoxFillHoverColor, ExtendBoxRect);
|
||||
}
|
||||
|
||||
if (ExtendSymbol == 0)
|
||||
{
|
||||
e.Graphics.DrawLine(controlBoxForeColor,
|
||||
ExtendBoxRect.Left + ExtendBoxRect.Width / 2 - 5 - 1,
|
||||
ExtendBoxRect.Top + ExtendBoxRect.Height / 2 - 2,
|
||||
ExtendBoxRect.Left + ExtendBoxRect.Width / 2 - 1,
|
||||
ExtendBoxRect.Top + ExtendBoxRect.Height / 2 + 3);
|
||||
|
||||
e.Graphics.DrawLine(controlBoxForeColor,
|
||||
ExtendBoxRect.Left + ExtendBoxRect.Width / 2 + 5 - 1,
|
||||
ExtendBoxRect.Top + ExtendBoxRect.Height / 2 - 2,
|
||||
ExtendBoxRect.Left + ExtendBoxRect.Width / 2 - 1,
|
||||
ExtendBoxRect.Top + ExtendBoxRect.Height / 2 + 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Graphics.DrawFontImage(extendSymbol, ExtendSymbolSize, controlBoxForeColor, ExtendBoxRect, ExtendSymbolOffset.X, ExtendSymbolOffset.Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Color controlBoxForeColor = Color.White;
|
||||
/// <summary>
|
||||
/// 标题栏颜色
|
||||
/// </summary>
|
||||
[Description("标题栏按钮颜色"), Category("SunnyUI"), DefaultValue(typeof(Color), "White")]
|
||||
public Color ControlBoxForeColor
|
||||
{
|
||||
get => controlBoxForeColor;
|
||||
set
|
||||
{
|
||||
if (controlBoxForeColor != value)
|
||||
{
|
||||
controlBoxForeColor = value;
|
||||
_style = UIStyle.Custom;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Color controlBoxFillHoverColor;
|
||||
/// <summary>
|
||||
/// 标题栏颜色
|
||||
/// </summary>
|
||||
[Description("标题栏按钮移上背景颜色"), Category("SunnyUI"), DefaultValue(typeof(Color), "115, 179, 255")]
|
||||
public Color ControlBoxFillHoverColor
|
||||
{
|
||||
get => controlBoxFillHoverColor;
|
||||
set
|
||||
{
|
||||
if (ControlBoxFillHoverColor != value)
|
||||
{
|
||||
controlBoxFillHoverColor = value;
|
||||
_style = UIStyle.Custom;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Point extendSymbolOffset = new Point(0, 0);
|
||||
|
||||
[DefaultValue(typeof(Point), "0, 0")]
|
||||
[Description("扩展按钮字体图标偏移量"), Category("SunnyUI")]
|
||||
public Point ExtendSymbolOffset
|
||||
{
|
||||
get => extendSymbolOffset;
|
||||
set
|
||||
{
|
||||
extendSymbolOffset = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
private int _extendSymbolSize = 24;
|
||||
|
||||
[DefaultValue(24)]
|
||||
[Description("扩展按钮字体图标大小"), Category("SunnyUI")]
|
||||
public int ExtendSymbolSize
|
||||
{
|
||||
get => _extendSymbolSize;
|
||||
set
|
||||
{
|
||||
_extendSymbolSize = Math.Max(value, 16);
|
||||
_extendSymbolSize = Math.Min(value, 128);
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
private int extendSymbol;
|
||||
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
[Editor("Sunny.UI.UIImagePropertyEditor, " + AssemblyRefEx.SystemDesign, typeof(UITypeEditor))]
|
||||
[DefaultValue(0)]
|
||||
[Description("扩展按钮字体图标"), Category("SunnyUI")]
|
||||
public int ExtendSymbol
|
||||
{
|
||||
get => extendSymbol;
|
||||
set
|
||||
{
|
||||
extendSymbol = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnMouseClick(MouseEventArgs e)
|
||||
@ -618,9 +765,31 @@ namespace Sunny.UI
|
||||
Close();
|
||||
AfterClose();
|
||||
}
|
||||
|
||||
if (InExtendBox)
|
||||
{
|
||||
InExtendBox = false;
|
||||
if (ExtendMenu != null)
|
||||
{
|
||||
this.ShowContextMenuStrip(ExtendMenu, ExtendBoxRect.Left, TitleHeight - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExtendBoxClick?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[DefaultValue(null)]
|
||||
[Description("扩展按钮菜单"), Category("SunnyUI")]
|
||||
public UIContextMenuStrip ExtendMenu
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public event EventHandler ExtendBoxClick;
|
||||
|
||||
private void AfterClose()
|
||||
{
|
||||
Console.WriteLine("Close");
|
||||
@ -733,6 +902,7 @@ namespace Sunny.UI
|
||||
}
|
||||
|
||||
private bool InControlBox;
|
||||
private bool InExtendBox;
|
||||
|
||||
/// <summary>
|
||||
/// 重载鼠标移动事件
|
||||
@ -742,16 +912,39 @@ namespace Sunny.UI
|
||||
{
|
||||
base.OnMouseMove(e);
|
||||
|
||||
if (ShowTitle && ControlBox)
|
||||
if (ShowTitle)
|
||||
{
|
||||
bool inControlBox = e.Location.InRect(ControlBoxRect);
|
||||
|
||||
if (inControlBox != InControlBox)
|
||||
if (ControlBox)
|
||||
{
|
||||
InControlBox = inControlBox;
|
||||
Invalidate();
|
||||
bool inControlBox = e.Location.InRect(ControlBoxRect);
|
||||
if (inControlBox != InControlBox)
|
||||
{
|
||||
InControlBox = inControlBox;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
if (ExtendBox)
|
||||
{
|
||||
bool inExtendBox = e.Location.InRect(ExtendBoxRect);
|
||||
if (inExtendBox != InExtendBox)
|
||||
{
|
||||
InExtendBox = inExtendBox;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
InControlBox = InExtendBox = false;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnMouseLeave(EventArgs e)
|
||||
{
|
||||
base.OnMouseLeave(e);
|
||||
InExtendBox = InControlBox = false;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
protected override void OnPaddingChanged(EventArgs e)
|
||||
@ -797,9 +990,34 @@ namespace Sunny.UI
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
private Rectangle ExtendBoxRect;
|
||||
|
||||
private void CalcSystemBoxPos()
|
||||
{
|
||||
ControlBoxRect = new Rectangle(Width - 6 - 28, titleHeight / 2 - 14, 28, 28);
|
||||
if (ControlBox)
|
||||
{
|
||||
ControlBoxRect = new Rectangle(Width - 6 - 28, titleHeight / 2 - 14, 28, 28);
|
||||
}
|
||||
else
|
||||
{
|
||||
ControlBoxRect = new Rectangle(Width + 1, Height + 1, 1, 1);
|
||||
}
|
||||
|
||||
if (ExtendBox)
|
||||
{
|
||||
if (ControlBox)
|
||||
{
|
||||
ExtendBoxRect = new Rectangle(ControlBoxRect.Left - 28 - 2, ControlBoxRect.Top, 28, 28);
|
||||
}
|
||||
else
|
||||
{
|
||||
ExtendBoxRect = new Rectangle(Width - 6 - 28, titleHeight / 2 - 14, 28, 28);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ExtendBoxRect = new Rectangle(Width + 1, Height + 1, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
private Rectangle ControlBoxRect;
|
||||
|
Loading…
x
Reference in New Issue
Block a user