fix: 优化左侧菜单高度与悬浮状态

This commit is contained in:
2026-08-10 16:56:46 +08:00
parent f92fd2f1cc
commit f1ce6ff658
@@ -142,6 +142,7 @@ namespace Lskj.Main.Control
private const int GroupControlTopPadding = 8;
private static readonly Color LeftGroupTreeBackgroundColor = Color.FromArgb(39, 45, 81);
private static readonly Color LeftGroupTreeActiveColor = Color.FromArgb(52, 142, 216);
private static readonly Color LeftGroupTreeHoverColor = Color.FromArgb(79, 101, 132);
private static readonly Color LeftGroupTreeTextColor = Color.FromArgb(235, 255, 255, 255);
private static readonly Color LeftGroupTreeArrowColor = Color.FromArgb(173, 255, 255, 255);
@@ -774,8 +775,10 @@ namespace Lskj.Main.Control
_leftGroupTreeView.Columns.Add(textColumn);
_leftGroupTreeView.OptionsBehavior.Editable = false;
_leftGroupTreeView.OptionsBehavior.AutoNodeHeight = false;
_leftGroupTreeView.OptionsSelection.EnableAppearanceFocusedCell = false;
_leftGroupTreeView.OptionsSelection.EnableAppearanceFocusedRow = true;
_leftGroupTreeView.OptionsSelection.MultiSelect = true;
_leftGroupTreeView.OptionsView.AutoWidth = true;
_leftGroupTreeView.OptionsView.ExpandButtonCentered = true;
_leftGroupTreeView.OptionsView.ShowButtons = false;
@@ -802,10 +805,15 @@ namespace Lskj.Main.Control
_leftGroupTreeView.Appearance.HideSelectionRow.ForeColor = Color.White;
_leftGroupTreeView.Appearance.HideSelectionRow.Options.UseBackColor = true;
_leftGroupTreeView.Appearance.HideSelectionRow.Options.UseForeColor = true;
_leftGroupTreeView.Appearance.SelectedRow.BackColor = LeftGroupTreeHoverColor;
_leftGroupTreeView.Appearance.SelectedRow.ForeColor = Color.White;
_leftGroupTreeView.Appearance.SelectedRow.Options.UseBackColor = true;
_leftGroupTreeView.Appearance.SelectedRow.Options.UseForeColor = true;
_leftGroupTreeView.SelectImageList = GetLeftGroupTreeImageList();
_leftGroupTreeView.AfterCollapse += OnLeftGroupTreeListAfterExpandOrCollapse;
_leftGroupTreeView.AfterExpand += OnLeftGroupTreeListAfterExpandOrCollapse;
_leftGroupTreeView.CalcNodeHeight += OnLeftGroupTreeListCalcNodeHeight;
_leftGroupTreeView.MouseClick += OnLeftGroupTreeListMouseClick;
_leftGroupTreeView.MouseLeave += OnLeftGroupTreeListMouseLeave;
_leftGroupTreeView.MouseMove += OnLeftGroupTreeListMouseMove;
@@ -883,6 +891,12 @@ namespace Lskj.Main.Control
UpdateLeftGroupTreeNodeArrow(e == null ? null : e.Node);
}
private void OnLeftGroupTreeListCalcNodeHeight(object sender, CalcNodeHeightEventArgs e)
{
if (e == null || e.Node == null) return;
e.NodeHeight = ScaleLeftGroupTreeMetric(e.Node.Level == 0 ? 44 : 36);
}
private void UpdateLeftGroupTreeNodeArrow(TreeListNode node)
{
if (node == null || node.Level != 0) return;
@@ -900,8 +914,16 @@ namespace Lskj.Main.Control
TreeListNode hotNode = hitInfo == null ? null : hitInfo.Node;
if (hotNode == _leftGroupHotNode) return;
if (_leftGroupHotNode != null && _leftGroupHotNode != _leftGroupSelectedNode)
{
_leftGroupHotNode.Selected = false;
}
_leftGroupHotNode = hotNode;
treeList.FocusedNode = _leftGroupHotNode ?? _leftGroupSelectedNode;
if (_leftGroupHotNode != null && _leftGroupHotNode != _leftGroupSelectedNode)
{
_leftGroupHotNode.Selected = true;
}
treeList.Invalidate();
}
private void OnLeftGroupTreeListMouseLeave(object sender, EventArgs e)
@@ -909,11 +931,17 @@ namespace Lskj.Main.Control
TreeList treeList = sender as TreeList;
if (treeList == null) return;
if (_leftGroupHotNode != null && _leftGroupHotNode != _leftGroupSelectedNode)
{
_leftGroupHotNode.Selected = false;
}
_leftGroupHotNode = null;
if (_leftGroupSelectedNode != null)
{
_leftGroupSelectedNode.Selected = true;
treeList.FocusedNode = _leftGroupSelectedNode;
}
treeList.Invalidate();
}
private Panel GetLeftGroupSeparator()
@@ -1011,6 +1039,7 @@ namespace Lskj.Main.Control
if (!string.IsNullOrEmpty(defaultNode) && nodeMap.ContainsKey(defaultNode))
{
_leftGroupSelectedNode = nodeMap[defaultNode];
_leftGroupSelectedNode.Selected = true;
treeList.FocusedNode = _leftGroupSelectedNode;
}
}
@@ -1030,8 +1059,19 @@ namespace Lskj.Main.Control
TreeListHitInfo hitInfo = treeList.CalcHitInfo(e.Location);
if (hitInfo == null || hitInfo.Node == null) return;
if (_leftGroupHotNode != null && _leftGroupHotNode != hitInfo.Node)
{
_leftGroupHotNode.Selected = false;
}
if (_leftGroupSelectedNode != null && _leftGroupSelectedNode != hitInfo.Node)
{
_leftGroupSelectedNode.Selected = false;
}
_leftGroupSelectedNode = hitInfo.Node;
_leftGroupHotNode = hitInfo.Node;
_leftGroupSelectedNode.Selected = true;
treeList.FocusedNode = _leftGroupSelectedNode;
treeList.Invalidate();
if (hitInfo.Node.HasChildren && hitInfo.HitInfoType != HitInfoType.Button)
{
hitInfo.Node.Expanded = !hitInfo.Node.Expanded;