using AntdUI; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Linq; namespace JinYuan.ControlLib { public enum NavigationItemType { Normal, // 普通项 Settings, // 设置项 UserManagement // 用户管理项 } public enum Position { Top, Bottom } public class SidebarNavigationItem { public string Text { get; set; } public string Tag { get; set; } public string IconSvg { get; set; } public Func CreatePageControl { get; set; } public NavigationItemType ItemType { get; set; } = NavigationItemType.Normal; public Position Position { get; set; } = Position.Top; public bool IsSettings { get; set; } } public partial class SidebarNavigation : UserControl { private List items = new List(); private Dictionary buttonCache = new Dictionary(); private Color lightBackgroundColor = Color.FromArgb(240, 240, 240); private Color darkBackgroundColor = Color.FromArgb(33, 33, 33); private Color lightSelectedColor = Color.FromArgb(0, 122, 204); private Color darkSelectedColor = Color.FromArgb(0, 122, 204); private AntdUI.Button selectedButton; private bool isReordering = false; private Font buttonFont = new Font("Microsoft YaHei UI", 10F); private ToolTip toolTip = new ToolTip(); // 添加 ToolTip 控件 public Size IconSize { get; set; } = new Size(42, 42); public event EventHandler ItemSelected; public class ButtonInfo { public SidebarNavigationItem Item { get; set; } public AntdUI.Button Button { get; set; } } private bool showText = false; public bool ShowText { get => showText; set { if (showText != value) { showText = value; UpdateButtonsLayout(); } } } public SidebarNavigation() { InitializeComponent(); SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true); this.BackColor = AntdUI.Config.IsDark ? darkBackgroundColor : lightBackgroundColor; this.Width = 50; this.Padding = new Padding(0); this.Margin = new Padding(0); this.AutoScroll = false; // 配置 ToolTip toolTip.AutoPopDelay = 5000; toolTip.InitialDelay = 500; toolTip.ReshowDelay = 500; toolTip.ShowAlways = true; } public void UpdateVisibility(Func visibilityPredicate) { this.SuspendLayout(); try { // 保存当前选中按钮的Tag string selectedTag = null; if (selectedButton?.Tag is ButtonInfo selectedInfo) { selectedTag = selectedInfo.Item.Tag; } // 缓存现有按钮的状态 foreach (Control control in this.Controls) { if (control is AntdUI.Button button && button.Tag is ButtonInfo info) { buttonCache[info.Item.Tag] = info; } } // 清除现有控件 this.Controls.Clear(); // 重新添加符合条件的按钮 var topButtons = items.Where(i => i.Position == Position.Top && visibilityPredicate(i)) .OrderBy(i => items.IndexOf(i)); var bottomButtons = items.Where(i => i.Position == Position.Bottom && visibilityPredicate(i)) .OrderBy(i => items.IndexOf(i)); // 添加顶部按钮 foreach (var item in topButtons.Reverse()) { CreateOrRestoreButton(item); } // 添加底部按钮 foreach (var item in bottomButtons) { CreateOrRestoreButton(item); } // 恢复选中状态 if (selectedTag != null) { foreach (Control control in this.Controls) { if (control is AntdUI.Button button && button.Tag is ButtonInfo info && info.Item.Tag == selectedTag) { SetSelectedButton(button); break; } } } } finally { this.ResumeLayout(); } } private void CreateOrRestoreButton(SidebarNavigationItem item) { if (buttonCache.TryGetValue(item.Tag, out ButtonInfo cachedInfo)) { AntdUI.Button btn = new AntdUI.Button { Text = showText ? item.Text : "", TextMultiLine = true, AutoEllipsis = true, BackColor = cachedInfo.Button.BackColor, ForeColor = AntdUI.Config.IsDark ? Color.White : Color.Black, Width = this.Width, Height = this.Width + 5, Dock = item.Position == Position.Bottom ? DockStyle.Bottom : DockStyle.Top, Font = buttonFont, IconPosition = TAlignMini.Top, Radius = 3, BorderWidth = 1, WaveSize = 1, IconSvg = item.IconSvg, IconRatio = 0.8f, Margin = new Padding(0), Padding = new Padding(0), RespondRealAreas = true, Type = cachedInfo.Button.Type, Ghost = false }; // 设置工具提示 toolTip.SetToolTip(btn, item.Text); btn.Click += NavigationButton_Click; var buttonInfo = new ButtonInfo { Item = item, Button = btn }; btn.Tag = buttonInfo; this.Controls.Add(btn); } else { CreateNavigationButton(item); } } private void CreateNavigationButton(SidebarNavigationItem item) { AntdUI.Button btn = new AntdUI.Button { Text = showText ? item.Text : "", TextMultiLine = true, AutoEllipsis = true, BackColor = Color.Transparent, ForeColor = AntdUI.Config.IsDark ? Color.White : Color.Black, Width = this.Width, Height = this.Width + 5, Dock = item.Position == Position.Bottom ? DockStyle.Bottom : DockStyle.Top, Font = buttonFont, IconPosition = TAlignMini.Top, Radius = 3, BorderWidth = 1, WaveSize = 1, IconSvg = item.IconSvg, IconRatio = 0.8f, Margin = new Padding(0), Padding = new Padding(0), RespondRealAreas = true, Type = TTypeMini.Primary, Ghost = false }; // 设置工具提示 toolTip.SetToolTip(btn, item.Text); btn.Click += NavigationButton_Click; var buttonInfo = new ButtonInfo { Item = item, Button = btn }; btn.Tag = buttonInfo; this.Controls.Add(btn); if (selectedButton != null && selectedButton.Tag is ButtonInfo selectedInfo && selectedInfo.Item.Tag == item.Tag) { SetSelectedButton(btn); } } private void UpdateButtonsLayout() { this.SuspendLayout(); foreach (Control control in this.Controls) { if (control is AntdUI.Button button) { button.Height = this.Width; if (button.Tag is ButtonInfo buttonInfo) { button.Text = showText ? buttonInfo.Item.Text : ""; } } } this.PerformLayout(); this.ResumeLayout(); } private void SetSelectedButton(AntdUI.Button button) { if (selectedButton != null) { selectedButton.BackColor = Color.Transparent; selectedButton.Type = TTypeMini.Default; selectedButton.Invalidate(); } selectedButton = button; if (button != null) { button.BackColor = AntdUI.Config.IsDark ? darkSelectedColor : lightSelectedColor; button.Type = TTypeMini.Primary; button.Invalidate(); } } public void UpdateTheme(bool isDark) { this.SuspendLayout(); this.BackColor = isDark ? darkBackgroundColor : lightBackgroundColor; foreach (Control control in this.Controls) { if (control is AntdUI.Button button) { if (button == selectedButton) { button.BackColor = isDark ? darkSelectedColor : lightSelectedColor; button.Type = TTypeMini.Primary; } else { button.BackColor = Color.Transparent; button.Type = TTypeMini.Default; } button.ForeColor = isDark ? Color.White : Color.Black; } } this.ResumeLayout(); } public void AddItem(SidebarNavigationItem item) { this.SuspendLayout(); items.Add(item); CreateNavigationButton(item); ReorderButtons(); this.ResumeLayout(); } protected override void OnResize(EventArgs e) { base.OnResize(e); foreach (Control control in this.Controls) { if (control is AntdUI.Button button) { button.Width = this.Width; button.Height = this.Width; } } } private void ReorderButtons() { if (isReordering) return; try { isReordering = true; this.SuspendLayout(); var visibleTopItems = items.Where(i => i.Position == Position.Top && this.Controls.Cast() .Any(c => c is AntdUI.Button b && b.Tag is ButtonInfo bi && bi.Item == i)) .OrderBy(i => items.IndexOf(i)); var visibleBottomItems = items.Where(i => i.Position == Position.Bottom && this.Controls.Cast() .Any(c => c is AntdUI.Button b && b.Tag is ButtonInfo bi && bi.Item == i)) .OrderBy(i => items.IndexOf(i)); this.Controls.Clear(); foreach (var item in visibleTopItems.Reverse()) { CreateOrRestoreButton(item); } foreach (var item in visibleBottomItems) { CreateOrRestoreButton(item); } } finally { this.ResumeLayout(); isReordering = false; } } private string ResizeSvgIcon(string svgContent, Size targetSize) { try { XDocument doc = XDocument.Parse(svgContent); XElement svg = doc.Root; if (svg.Attribute("width") != null && svg.Attribute("height") != null) { svg.SetAttributeValue("width", targetSize.Width); svg.SetAttributeValue("height", targetSize.Height); } if (svg.Attribute("viewBox") == null) { svg.SetAttributeValue("viewBox", $"0 0 {targetSize.Width} {targetSize.Height}"); } return doc.ToString(); } catch (Exception) { return svgContent; } } private void NavigationButton_Click(object sender, EventArgs e) { if (sender is AntdUI.Button clickedButton && clickedButton.Tag is ButtonInfo info) { SetSelectedButton(clickedButton); ItemSelected?.Invoke(this, info.Item); } } public void UpdateButtonText(string tag, string text) { foreach (Control control in this.Controls) { if (control is AntdUI.Button button && button.Tag is ButtonInfo buttonInfo && buttonInfo.Item.Tag == tag) { buttonInfo.Item.Text = text; button.Text = showText ? text : ""; toolTip.SetToolTip(button, text); // 更新工具提示 break; } } } public void ClearItems() { this.SuspendLayout(); try { items.Clear(); buttonCache.Clear(); // 清除按钮缓存 this.Controls.Clear(); selectedButton = null; } finally { this.ResumeLayout(); } this.Invalidate(); } public IEnumerable GetItems() { return items; } } //// 1. 首先定义导航项类型的枚举 //public enum NavigationItemType //{ // Normal, // 普通项 // Settings, // 设置项 // UserManagement // 用户管理项 //} //public enum Position //{ // Top, // Bottom //} //public class SidebarNavigationItem //{ // public string Text { get; set; } // public string Tag { get; set; } // public string IconSvg { get; set; } // public Func CreatePageControl { get; set; } // public NavigationItemType ItemType { get; set; } = NavigationItemType.Normal; // 默认为普通项 // public Position Position { get; set; } = Position.Top; // public bool IsSettings { get; set; } // 保留原有属性以保持兼容性 //} //public partial class SidebarNavigation : UserControl //{ // private List items = new List(); // private Color lightBackgroundColor = Color.FromArgb(240, 240, 240); // private Color darkBackgroundColor = Color.FromArgb(33, 33, 33); // private Color lightSelectedColor = Color.FromArgb(0, 122, 204); // private Color darkSelectedColor = Color.FromArgb(0, 122, 204); // private AntdUI.Button selectedButton; // private bool isReordering = false; // private Font buttonFont = new Font("Microsoft YaHei UI", 10F); // public Size IconSize { get; set; } = new Size(42,42); // public event EventHandler ItemSelected; // public class ButtonInfo // { // public SidebarNavigationItem Item { get; set; } // public AntdUI.Button Button { get; set; } // } // private bool showText = false; // public bool ShowText // { // get => showText; // set // { // if (showText != value) // { // showText = value; // UpdateButtonsLayout(); // } // } // } // public SidebarNavigation() // { // InitializeComponent(); // SetStyle(ControlStyles.OptimizedDoubleBuffer | // ControlStyles.AllPaintingInWmPaint | // ControlStyles.UserPaint, true); // this.BackColor = AntdUI.Config.IsDark ? darkBackgroundColor : lightBackgroundColor; // this.Width = 50; // this.Padding = new Padding(0);// 移除控件的内边距 // this.Margin = new Padding(0);// 移除控件的外边距 // this.AutoScroll = false;// 禁用自动滚动以避免出现滚动条 // } // public void UpdateVisibility(Func visibilityPredicate) // { // this.SuspendLayout(); // try // { // // 先从 Controls 集合中移除所有按钮 // this.Controls.Clear(); // // 重新添加符合条件的按钮 // var topButtons = items.Where(i => i.Position == Position.Top && visibilityPredicate(i)) // .OrderBy(i => items.IndexOf(i)); // var bottomButtons = items.Where(i => i.Position == Position.Bottom && visibilityPredicate(i)) // .OrderBy(i => items.IndexOf(i)); // // 添加顶部按钮 // foreach (var item in topButtons.Reverse()) // { // CreateNavigationButton(item); // } // // 添加底部按钮 // foreach (var item in bottomButtons) // { // CreateNavigationButton(item); // } // } // finally // { // this.ResumeLayout(); // } // } // private void CreateNavigationButton(SidebarNavigationItem item) // { // AntdUI.Button btn = new AntdUI.Button // { // Text = showText ? item.Text : "", // // 启用多行文本 // TextMultiLine = true, // // 允许文本超出时自动处理 // AutoEllipsis = true, // BackColor = Color.Transparent, // ForeColor = AntdUI.Config.IsDark ? Color.White : Color.Black, // Width = this.Width, // Height = this.Width + 5, // Dock = item.Position == Position.Bottom ? DockStyle.Bottom : DockStyle.Top, // Font = buttonFont, // IconPosition = TAlignMini.Top, // Radius = 3, // BorderWidth = 1, // WaveSize = 1, // IconSvg = item.IconSvg, // // Increase icon ratio to make icons larger relative to button size // IconRatio = 0.8f, // Margin = new Padding(0), // Padding = new Padding(0), // RespondRealAreas = true, // Type = TTypeMini.Primary, // Ghost = false // }; // btn.Click += NavigationButton_Click; // var buttonInfo = new ButtonInfo // { // Item = item, // Button = btn // }; // btn.Tag = buttonInfo; // this.Controls.Add(btn); // // 如果是当前选中的按钮,恢复选中状态 // if (selectedButton != null && // selectedButton.Tag is ButtonInfo selectedInfo && // selectedInfo.Item.Tag == item.Tag) // { // SetSelectedButton(btn); // } // } // private void UpdateButtonsLayout() // { // this.SuspendLayout(); // foreach (Control control in this.Controls) // { // if (control is AntdUI.Button button) // { // button.Height = this.Width; // if (button.Tag is ButtonInfo buttonInfo) // { // button.Text = showText ? buttonInfo.Item.Text : ""; // } // } // } // this.PerformLayout(); // this.ResumeLayout(); // } // private void SetSelectedButton(AntdUI.Button button) // { // if (selectedButton != null) // { // selectedButton.BackColor = Color.Transparent; // selectedButton.Type = TTypeMini.Default; // selectedButton.Invalidate(); // } // selectedButton = button; // if (button != null) // { // button.BackColor = AntdUI.Config.IsDark ? darkSelectedColor : lightSelectedColor; // button.Type = TTypeMini.Primary; // button.Invalidate(); // } // } // public void UpdateTheme(bool isDark) // { // this.SuspendLayout(); // this.BackColor = isDark ? darkBackgroundColor : lightBackgroundColor; // foreach (Control control in this.Controls) // { // if (control is AntdUI.Button button) // { // if (button == selectedButton) // { // button.BackColor = isDark ? darkSelectedColor : lightSelectedColor; // button.Type = TTypeMini.Primary; // } // else // { // button.BackColor = Color.Transparent; // button.Type = TTypeMini.Default; // } // button.ForeColor = isDark ? Color.White : Color.Black; // } // } // this.ResumeLayout(); // } // public void AddItem(SidebarNavigationItem item) // { // this.SuspendLayout(); // items.Add(item); // CreateNavigationButton(item); // ReorderButtons(); // this.ResumeLayout(); // } // protected override void OnResize(EventArgs e) // { // base.OnResize(e); // foreach (Control control in this.Controls) // { // if (control is AntdUI.Button button) // { // button.Width = this.Width; // button.Height = this.Width; // } // } // } // private void ReorderButtons() // { // if (isReordering) return; // try // { // isReordering = true; // this.SuspendLayout(); // // 获取当前所有可见的按钮 // var visibleTopItems = items.Where(i => i.Position == Position.Top && // this.Controls.Cast() // .Any(c => c is AntdUI.Button b && // b.Tag is ButtonInfo bi && // bi.Item == i)) // .OrderBy(i => items.IndexOf(i)); // var visibleBottomItems = items.Where(i => i.Position == Position.Bottom && // this.Controls.Cast() // .Any(c => c is AntdUI.Button b && // b.Tag is ButtonInfo bi && // bi.Item == i)) // .OrderBy(i => items.IndexOf(i)); // this.Controls.Clear(); // // 重新添加顶部按钮 // foreach (var item in visibleTopItems.Reverse()) // { // CreateNavigationButton(item); // } // // 重新添加底部按钮 // foreach (var item in visibleBottomItems) // { // CreateNavigationButton(item); // } // } // finally // { // this.ResumeLayout(); // isReordering = false; // } // } // private string ResizeSvgIcon(string svgContent, Size targetSize) // { // try // { // XDocument doc = XDocument.Parse(svgContent); // XElement svg = doc.Root; // if (svg.Attribute("width") != null && svg.Attribute("height") != null) // { // svg.SetAttributeValue("width", targetSize.Width); // svg.SetAttributeValue("height", targetSize.Height); // } // if (svg.Attribute("viewBox") == null) // { // svg.SetAttributeValue("viewBox", $"0 0 {targetSize.Width} {targetSize.Height}"); // } // return doc.ToString(); // } // catch (Exception) // { // return svgContent; // } // } // private void NavigationButton_Click(object sender, EventArgs e) // { // if (sender is AntdUI.Button clickedButton && clickedButton.Tag is ButtonInfo info) // { // SetSelectedButton(clickedButton); // ItemSelected?.Invoke(this, info.Item); // } // } // // 更新按钮文本的方法 // public void UpdateButtonText(string tag, string text) // { // foreach (Control control in this.Controls) // { // if (control is AntdUI.Button button && // button.Tag is ButtonInfo buttonInfo && // buttonInfo.Item.Tag == tag) // { // buttonInfo.Item.Text = text; // button.Text = showText ? text : ""; // break; // } // } // } // public void ClearItems() // { // this.SuspendLayout(); // try // { // items.Clear(); // this.Controls.Clear(); // selectedButton = null; // } // finally // { // this.ResumeLayout(); // } // this.Invalidate(); // } // public IEnumerable GetItems() // { // return items; // } //} } #region 最早期的 //public enum Position //{ // Top, // Bottom //} //public class SidebarNavigationItem //{ // public string Text { get; set; } // public string Tag { get; set; } // public string IconSvg { get; set; } // public Func CreatePageControl { get; set; } // public bool IsSettings { get; set; } // public Position Position { get; set; } = Position.Top; //} //public partial class SidebarNavigation : UserControl //{ // private List items = new List(); // private Color lightBackgroundColor = Color.FromArgb(240, 240, 240); // private Color darkBackgroundColor = Color.FromArgb(33, 33, 33); // private Color lightSelectedColor = Color.FromArgb(0, 150, 136); // private Color darkSelectedColor = Color.FromArgb(0, 200, 186); // private int buttonHeight = 40; // private AntdUI.Button selectedButton; // private ToolTip toolTip; // private bool isReordering = false; // public Size IconSize { get; set; } = new Size(200, 200); // public event EventHandler ItemSelected; // public SidebarNavigation() // { // InitializeComponent(); // SetStyle(ControlStyles.OptimizedDoubleBuffer | // ControlStyles.AllPaintingInWmPaint | // ControlStyles.UserPaint, true); // this.BackColor = AntdUI.Config.IsDark ? darkBackgroundColor : lightBackgroundColor; // this.Width = 50; // this.AutoScroll = true; // toolTip = new ToolTip // { // AutoPopDelay = 5000, // InitialDelay = 500, // ReshowDelay = 500, // ShowAlways = true // }; // } // public void AddItem(SidebarNavigationItem item) // { // this.SuspendLayout(); // items.Add(item); // CreateNavigationButton(item); // ReorderButtons(); // this.ResumeLayout(); // } // public void ClearItems() // { // this.SuspendLayout(); // try // { // items.Clear(); // for (int i = this.Controls.Count - 1; i >= 0; i--) // { // if (this.Controls[i] is AntdUI.Button button) // { // button.Click -= NavigationButton_Click; // this.Controls.RemoveAt(i); // button.Dispose(); // } // } // selectedButton = null; // ReorderButtons(); // } // finally // { // this.ResumeLayout(); // } // this.Invalidate(); // } // private void CreateNavigationButton(SidebarNavigationItem item) // { // string resizedSvg = ResizeSvgIcon(item.IconSvg, IconSize); // AntdUI.Button btn = new AntdUI.Button // { // Text = "", // Tag = item, // Dock = item.Position == Position.Bottom ? DockStyle.Bottom : DockStyle.Top, // Height = buttonHeight, // IconSvg = resizedSvg, // BackColor = this.BackColor, // ForeColor = AntdUI.Config.IsDark ? Color.White : Color.Black, // Radius = 0, // BorderWidth = 0 // }; // btn.Click += NavigationButton_Click; // toolTip.SetToolTip(btn, item.Text); // this.Controls.Add(btn); // } // private string ResizeSvgIcon(string svgContent, Size targetSize) // { // try // { // XDocument doc = XDocument.Parse(svgContent); // XElement svg = doc.Root; // if (svg.Attribute("width") != null && svg.Attribute("height") != null) // { // svg.SetAttributeValue("width", targetSize.Width); // svg.SetAttributeValue("height", targetSize.Height); // } // if (svg.Attribute("viewBox") == null) // { // svg.SetAttributeValue("viewBox", $"0 0 {targetSize.Width} {targetSize.Height}"); // } // return doc.ToString(); // } // catch (Exception) // { // return svgContent; // } // } // /// // /// 图标按钮排序 // /// // private void ReorderButtons() // { // if (isReordering) return; // try // { // isReordering = true; // this.SuspendLayout(); // var buttonDict = this.Controls.OfType() // .Where(b => b.Tag is SidebarNavigationItem) // .ToDictionary(b => ((SidebarNavigationItem)b.Tag).Tag); // this.Controls.Clear(); // // 分别获取顶部和底部的项目 // var topItems = items.Where(i => i.Position == Position.Top) // .OrderBy(i => items.IndexOf(i)); // var bottomItems = items.Where(i => i.Position == Position.Bottom) // .OrderBy(i => items.IndexOf(i)); // // 添加顶部按钮(反序添加以保证正确顺序) // foreach (var item in topItems.Reverse()) // { // if (buttonDict.TryGetValue(item.Tag, out var button)) // { // button.Dock = DockStyle.Top; // this.Controls.Add(button); // } // } // // 添加底部按钮(正序添加以保证正确顺序) // foreach (var item in bottomItems) // { // if (buttonDict.TryGetValue(item.Tag, out var button)) // { // button.Dock = DockStyle.Bottom; // this.Controls.Add(button); // } // } // } // finally // { // this.ResumeLayout(); // isReordering = false; // } // } // public void UpdateIconSize(Size newSize) // { // this.IconSize = newSize; // foreach (Control control in this.Controls) // { // if (control is AntdUI.Button button && button.Tag is SidebarNavigationItem item) // { // string resizedSvg = ResizeSvgIcon(item.IconSvg, newSize); // button.IconSvg = resizedSvg; // } // } // this.Invalidate(); // } // private void NavigationButton_Click(object sender, EventArgs e) // { // if (sender is AntdUI.Button clickedButton && clickedButton.Tag is SidebarNavigationItem item) // { // SetSelectedButton(clickedButton); // ItemSelected?.Invoke(this, item); // } // } // private void SetSelectedButton(AntdUI.Button button) // { // if (selectedButton != null) // { // selectedButton.BackColor = this.BackColor; // } // selectedButton = button; // selectedButton.BackColor = AntdUI.Config.IsDark ? darkSelectedColor : lightSelectedColor; // } // public void UpdateTheme(bool isDark) // { // this.SuspendLayout(); // this.BackColor = isDark ? darkBackgroundColor : lightBackgroundColor; // foreach (Control control in this.Controls) // { // if (control is AntdUI.Button button) // { // button.BackColor = this.BackColor; // button.ForeColor = isDark ? Color.White : Color.Black; // } // } // if (selectedButton != null) // { // selectedButton.BackColor = isDark ? darkSelectedColor : lightSelectedColor; // } // toolTip.BackColor = isDark ? Color.FromArgb(64, 64, 64) : Color.White; // toolTip.ForeColor = isDark ? Color.White : Color.Black; // this.ResumeLayout(); // } // public void UpdateItemToolTip(AntdUI.Button button, string translatedText) // { // if (button.InvokeRequired) // { // button.Invoke(new Action(() => toolTip.SetToolTip(button, translatedText))); // } // else // { // toolTip.SetToolTip(button, translatedText); // } // } // protected override void OnControlAdded(ControlEventArgs e) // { // base.OnControlAdded(e); // ReorderButtons(); // } // protected override void OnResize(EventArgs e) // { // base.OnResize(e); // this.SuspendLayout(); // foreach (Control control in this.Controls) // { // if (control is AntdUI.Button button) // { // button.Width = this.Width; // } // } // this.ResumeLayout(); // } // public void SelectFirstItem() // { // if (this.Controls.Count > 0 && this.Controls[0] is AntdUI.Button firstButton) // { // SetSelectedButton(firstButton); // if (firstButton.Tag is SidebarNavigationItem item) // { // ItemSelected?.Invoke(this, item); // } // } // } // public IEnumerable GetItems() // { // return items; // } // public void UpdateVisibility(Func visibilityPredicate) // { // this.SuspendLayout(); // foreach (Control control in this.Controls) // { // if (control is AntdUI.Button button && button.Tag is SidebarNavigationItem item) // { // button.Visible = visibilityPredicate(item); // } // } // this.ResumeLayout(); // } //} #endregion