mirror of
https://github.com/zs-yg/kortapp-z.git
synced 2025-12-06 16:10:42 +08:00
120 lines
4.5 KiB
C#
120 lines
4.5 KiB
C#
// _ _
|
|
//| | _____ _ __| |_ __ _ _ __ _ __ ____
|
|
//| |/ / _ \| '__| __/ _` | '_ \| '_ \ ____|_ /
|
|
//| | (_) | | | || (_| | |_) | |_) |_____/ /
|
|
//|_|\_\___/|_| \__\__,_| .__/| .__/ /___|
|
|
// |_| |_|
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace AppStore
|
|
{
|
|
public class ToolCard : UserControl
|
|
{
|
|
private PictureBox iconBox = new PictureBox();
|
|
private Label nameLabel = new Label();
|
|
private Panel namePanel = new Panel();
|
|
private Color borderColor = SystemColors.ControlDark;
|
|
|
|
public string ToolName { get; set; } = string.Empty;
|
|
public Image ToolIcon { get; set; } = SystemIcons.Shield.ToBitmap();
|
|
|
|
// 自定义点击事件初始化为空委托
|
|
public event EventHandler ToolCardClicked = delegate {};
|
|
|
|
public ToolCard()
|
|
{
|
|
// 启用双缓冲
|
|
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
|
|
ControlStyles.ResizeRedraw, true);
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
this.Size = new Size(240, 220);
|
|
this.BackColor = Color.White;
|
|
this.Padding = new Padding(5);
|
|
this.BorderStyle = BorderStyle.FixedSingle;
|
|
|
|
// 工具图标
|
|
iconBox = new PictureBox();
|
|
iconBox.Size = new Size(80, 80);
|
|
iconBox.Location = new Point((Width - 80) / 2, 15);
|
|
iconBox.SizeMode = PictureBoxSizeMode.StretchImage;
|
|
this.Controls.Add(iconBox);
|
|
|
|
// 工具名称 - 使用Panel包裹Label实现边框颜色
|
|
namePanel = new Panel();
|
|
namePanel.Size = new Size(Width - 20, 30);
|
|
namePanel.Location = new Point(10, 100);
|
|
namePanel.Paint += (sender, e) => {
|
|
ControlPaint.DrawBorder(e.Graphics, namePanel.ClientRectangle,
|
|
borderColor, ButtonBorderStyle.Solid);
|
|
};
|
|
|
|
nameLabel = new Label();
|
|
nameLabel.Dock = DockStyle.Fill;
|
|
nameLabel.Font = new Font("Microsoft YaHei", 10, FontStyle.Bold);
|
|
nameLabel.TextAlign = ContentAlignment.MiddleCenter;
|
|
namePanel.Controls.Add(nameLabel);
|
|
|
|
// 初始主题设置
|
|
UpdateLabelTheme();
|
|
|
|
// 订阅主题变化事件
|
|
ThemeManager.ThemeChanged += (theme) => UpdateLabelTheme();
|
|
|
|
this.Controls.Add(namePanel);
|
|
|
|
// 打开按钮
|
|
var openButton = new Button();
|
|
openButton.Text = "打开工具";
|
|
openButton.Size = new Size(100, 30);
|
|
openButton.Location = new Point((Width - 100) / 2, 140);
|
|
openButton.BackColor = Color.FromArgb(0, 120, 215);
|
|
openButton.ForeColor = Color.White;
|
|
openButton.FlatStyle = FlatStyle.Flat;
|
|
openButton.FlatAppearance.BorderSize = 0;
|
|
openButton.Cursor = Cursors.Hand;
|
|
// 按钮点击直接触发ToolCardClicked事件
|
|
openButton.Click += (s, e) => {
|
|
ToolCardClicked?.Invoke(this, e);
|
|
};
|
|
this.Controls.Add(openButton);
|
|
|
|
// 设置按钮悬停效果
|
|
openButton.BackColor = Color.FromArgb(0, 120, 215);
|
|
openButton.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 100, 180);
|
|
openButton.FlatAppearance.MouseDownBackColor = Color.FromArgb(0, 80, 160);
|
|
}
|
|
|
|
private void UpdateLabelTheme()
|
|
{
|
|
if (ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Dark)
|
|
{
|
|
nameLabel.BackColor = Color.Black;
|
|
nameLabel.ForeColor = Color.White;
|
|
namePanel.BackColor = Color.Black;
|
|
borderColor = Color.White;
|
|
}
|
|
else
|
|
{
|
|
nameLabel.BackColor = Color.White;
|
|
nameLabel.ForeColor = Color.Black;
|
|
namePanel.BackColor = Color.White;
|
|
borderColor = SystemColors.ControlDark;
|
|
}
|
|
namePanel.Invalidate(); // 触发重绘
|
|
}
|
|
|
|
public void UpdateDisplay()
|
|
{
|
|
nameLabel.Text = ToolName;
|
|
iconBox.Image = ToolIcon;
|
|
UpdateLabelTheme();
|
|
}
|
|
}
|
|
}
|