Compare commits

...

5 Commits

Author SHA1 Message Date
zsyg
ac93c8418f Add files via upload 2025-06-30 20:25:25 +08:00
zsyg
5a49714ed7 Add files via upload 2025-06-30 20:22:07 +08:00
zsyg
19056a1a8c Add files via upload 2025-06-30 20:21:19 +08:00
zsyg
7c4250f912 Add files via upload 2025-06-30 20:20:48 +08:00
zsyg
d056c24a1b Add files via upload 2025-06-30 20:20:21 +08:00
7 changed files with 481 additions and 204 deletions

View File

@@ -1,141 +1,144 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace AppStore
{
public class AboutUserControl : UserControl
{
private PictureBox logo = null!;
private Label infoLabel = null!;
public AboutUserControl()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.Dock = DockStyle.Fill;
this.BackColor = Color.White;
this.Padding = new Padding(20);
// 创建主布局面板
TableLayoutPanel mainLayout = new TableLayoutPanel();
mainLayout.Dock = DockStyle.Fill;
mainLayout.ColumnCount = 1;
mainLayout.RowCount = 2;
mainLayout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.Padding = new Padding(0, 20, 0, 20);
// 初始化并添加应用图标
logo = new PictureBox();
try
{
logo.Image = Image.FromFile("img/png/kortapp-z.png");
}
catch (Exception ex)
{
Logger.LogError($"无法加载应用图标: {ex.Message}");
logo.Image = SystemIcons.Application.ToBitmap();
}
logo.SizeMode = PictureBoxSizeMode.Zoom;
logo.Width = 200;
logo.Height = 200;
logo.Anchor = AnchorStyles.None;
logo.Margin = new Padding(0, 0, 0, 20);
mainLayout.Controls.Add(logo, 0, 0);
// 初始化并添加应用信息
infoLabel = new Label();
infoLabel.Text = "kortapp-z\n版本: 1.1.0\n作者: zs-yg\n一个简单、开源的应用商店\nkortapp-z是完全免费\n基于.NET8和C/C++的软件";
infoLabel.Font = new Font("Microsoft YaHei", 12);
infoLabel.AutoSize = false;
infoLabel.Width = 300;
infoLabel.Height = 130; // 增加高度确保文字完整显示
infoLabel.TextAlign = ContentAlignment.MiddleCenter;
infoLabel.Anchor = AnchorStyles.None;
mainLayout.Controls.Add(infoLabel, 0, 1);
// 调整主布局为3行
mainLayout.RowCount = 3;
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
// 在底部添加GitHub链接区域
TableLayoutPanel githubPanel = new TableLayoutPanel();
githubPanel.Dock = DockStyle.Bottom;
githubPanel.Height = 60;
githubPanel.ColumnCount = 3;
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
githubPanel.RowCount = 1;
githubPanel.Padding = new Padding(10);
// 添加GitHub图标
PictureBox githubIcon = new PictureBox();
try
{
githubIcon.Image = Image.FromFile("img/jpg/github.jpg");
}
catch (Exception ex)
{
Logger.LogError($"无法加载GitHub图标: {ex.Message}");
githubIcon.Image = SystemIcons.Application.ToBitmap();
}
githubIcon.SizeMode = PictureBoxSizeMode.Zoom;
githubIcon.Width = 30;
githubIcon.Height = 30;
githubIcon.Cursor = Cursors.Hand;
githubIcon.Click += (s, e) => {
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = "https://github.com/zs-yg/kortapp-z",
UseShellExecute = true
});
};
// 添加文字说明
Label githubLabel = new Label();
githubLabel.Text = "🤗🤗🤗开源地址 🌟 欢迎点star和提交pr 🚀";
githubLabel.Font = new Font("Microsoft YaHei", 10);
githubLabel.AutoSize = true;
githubLabel.Margin = new Padding(10, 0, 0, 0);
// 创建包含图标和文字的面板
Panel linkPanel = new Panel();
linkPanel.AutoSize = true;
linkPanel.Controls.Add(githubIcon);
linkPanel.Controls.Add(githubLabel);
githubIcon.Location = new Point(0, 0);
githubLabel.Location = new Point(githubIcon.Width + 10, 5);
// 将链接面板添加到中间列
githubPanel.Controls.Add(linkPanel, 1, 0);
this.Controls.Add(mainLayout);
this.Controls.Add(githubPanel);
}
}
// 保留原AboutForm作为容器(可选)
public class AboutForm : Form
{
public AboutForm()
{
this.Text = "关于 kortapp-z";
this.Size = new Size(500, 400);
this.StartPosition = FormStartPosition.CenterScreen;
this.FormBorderStyle = FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
var aboutControl = new AboutUserControl();
this.Controls.Add(aboutControl);
}
}
}
using System;
using System.Drawing;
using System.Windows.Forms;
namespace AppStore
{
public class AboutUserControl : UserControl
{
private PictureBox logo = null!;
private Label infoLabel = null!;
public AboutUserControl()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.Dock = DockStyle.Fill;
this.BackColor = ThemeManager.BackgroundColor;
this.Padding = new Padding(20);
// 创建主布局面板
TableLayoutPanel mainLayout = new TableLayoutPanel();
mainLayout.Dock = DockStyle.Fill;
mainLayout.BackColor = ThemeManager.BackgroundColor;
mainLayout.ColumnCount = 1;
mainLayout.RowCount = 2;
mainLayout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.Padding = new Padding(0, 20, 0, 20);
// 初始化并添加应用图标
logo = new PictureBox();
try
{
logo.Image = Image.FromFile("img/png/kortapp-z.png");
}
catch (Exception ex)
{
Logger.LogError($"无法加载应用图标: {ex.Message}");
logo.Image = SystemIcons.Application.ToBitmap();
}
logo.SizeMode = PictureBoxSizeMode.Zoom;
logo.Width = 200;
logo.Height = 200;
logo.Anchor = AnchorStyles.None;
logo.Margin = new Padding(0, 0, 0, 20);
mainLayout.Controls.Add(logo, 0, 0);
// 初始化并添加应用信息
infoLabel = new Label();
infoLabel.Text = "kortapp-z\n版本: 1.1.1\n作者: zs-yg\n一个简单、开源的应用商店\nkortapp-z是完全免费\n基于.NET8和C/C++的软件";
infoLabel.Font = new Font("Microsoft YaHei", 12);
infoLabel.AutoSize = false;
infoLabel.Width = 300;
infoLabel.Height = 130; // 增加高度确保文字完整显示
infoLabel.TextAlign = ContentAlignment.MiddleCenter;
infoLabel.Anchor = AnchorStyles.None;
mainLayout.Controls.Add(infoLabel, 0, 1);
// 调整主布局为3行
mainLayout.RowCount = 3;
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
// 在底部添加GitHub链接区域
TableLayoutPanel githubPanel = new TableLayoutPanel();
githubPanel.Dock = DockStyle.Bottom;
githubPanel.BackColor = ThemeManager.BackgroundColor;
githubPanel.Height = 60;
githubPanel.ColumnCount = 3;
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
githubPanel.RowCount = 1;
githubPanel.Padding = new Padding(10);
// 添加GitHub图标
PictureBox githubIcon = new PictureBox();
try
{
githubIcon.Image = Image.FromFile("img/jpg/github.jpg");
}
catch (Exception ex)
{
Logger.LogError($"无法加载GitHub图标: {ex.Message}");
githubIcon.Image = SystemIcons.Application.ToBitmap();
}
githubIcon.SizeMode = PictureBoxSizeMode.Zoom;
githubIcon.Width = 30;
githubIcon.Height = 30;
githubIcon.Cursor = Cursors.Hand;
githubIcon.Click += (s, e) => {
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
{
FileName = "https://github.com/zs-yg/kortapp-z",
UseShellExecute = true
});
};
// 添加文字说明
Label githubLabel = new Label();
githubLabel.Text = "🤗🤗🤗开源地址 🌟 欢迎点star和提交pr 🚀";
githubLabel.Font = new Font("Microsoft YaHei", 10);
githubLabel.AutoSize = true;
githubLabel.Margin = new Padding(10, 0, 0, 0);
// 创建包含图标和文字的面板
Panel linkPanel = new Panel();
linkPanel.AutoSize = true;
linkPanel.BackColor = ThemeManager.BackgroundColor;
linkPanel.Controls.Add(githubIcon);
linkPanel.Controls.Add(githubLabel);
githubIcon.Location = new Point(0, 0);
githubLabel.Location = new Point(githubIcon.Width + 10, 5);
// 将链接面板添加到中间列
githubPanel.Controls.Add(linkPanel, 1, 0);
this.Controls.Add(mainLayout);
this.Controls.Add(githubPanel);
}
}
// 保留原AboutForm作为容器(可选)
public class AboutForm : Form
{
public AboutForm()
{
this.Text = "关于 kortapp-z";
this.Size = new Size(500, 400);
this.StartPosition = FormStartPosition.CenterScreen;
this.FormBorderStyle = FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
var aboutControl = new AboutUserControl();
this.Controls.Add(aboutControl);
}
}
}

View File

@@ -23,13 +23,40 @@ namespace AppStore
cancelBtn = new Button();
InitializeComponent();
// 监听主题变化
ThemeManager.ThemeChanged += (theme) => {
this.Invoke((MethodInvoker)delegate {
ApplyTheme();
});
};
}
private void ApplyTheme()
{
this.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.White
: Color.Black;
this.ForeColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.Black
: Color.White;
cancelBtn.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? SystemColors.Control
: Color.FromArgb(70, 70, 70);
cancelBtn.ForeColor = ThemeManager.TextColor;
}
private void InitializeComponent()
{
this.Size = new Size(400, 60);
this.BackColor = Color.White;
this.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.White
: Color.Black;
this.BorderStyle = BorderStyle.FixedSingle;
this.ForeColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.Black
: Color.White;
// 文件名标签
nameLabel = new Label();
@@ -56,6 +83,12 @@ namespace AppStore
cancelBtn.Text = "取消";
cancelBtn.Size = new Size(60, 25);
cancelBtn.Location = new Point(320, 30);
cancelBtn.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? SystemColors.Control
: Color.FromArgb(70, 70, 70);
cancelBtn.ForeColor = ThemeManager.TextColor;
cancelBtn.FlatStyle = FlatStyle.Flat;
cancelBtn.FlatAppearance.BorderSize = 0;
cancelBtn.Click += CancelBtn_Click;
this.Controls.Add(cancelBtn);
}

View File

@@ -140,11 +140,19 @@ namespace AppStore
this.StartPosition = FormStartPosition.CenterScreen;
this.Icon = new Icon("img/ico/icon.ico"); // 设置窗体图标
// 注册主题变更事件
ThemeManager.ThemeChanged += (theme) =>
{
this.Invoke((MethodInvoker)delegate {
AnimateThemeChange();
});
};
// 现代化顶部导航栏
Panel buttonPanel = new Panel();
buttonPanel.Dock = DockStyle.Top;
buttonPanel.Height = 70;
buttonPanel.BackColor = Color.FromArgb(240, 240, 240);
buttonPanel.BackColor = ThemeManager.ControlBackgroundColor;
buttonPanel.Padding = new Padding(10, 15, 10, 0);
buttonPanel.AutoScroll = true;
buttonPanel.AutoSize = true;
@@ -154,11 +162,13 @@ namespace AppStore
Action<Button> styleButton = (Button btn) => {
btn.FlatStyle = FlatStyle.Flat;
btn.FlatAppearance.BorderSize = 0;
btn.BackColor = Color.Transparent;
btn.ForeColor = Color.FromArgb(64, 64, 64);
btn.BackColor = ThemeManager.ControlBackgroundColor;
btn.ForeColor = ThemeManager.TextColor;
btn.Font = new Font("Microsoft YaHei", 10, FontStyle.Regular);
btn.Size = new Size(120, 40);
btn.Cursor = Cursors.Hand;
btn.FlatAppearance.MouseOverBackColor = ThemeManager.ButtonHoverColor;
btn.FlatAppearance.MouseDownBackColor = ThemeManager.ButtonActiveColor;
// 悬停效果
btn.MouseEnter += (s, e) => {
@@ -167,7 +177,7 @@ namespace AppStore
};
btn.MouseLeave += (s, e) => {
btn.ForeColor = Color.FromArgb(64, 64, 64);
btn.ForeColor = ThemeManager.TextColor;
btn.Font = new Font(btn.Font, FontStyle.Regular);
};
};
@@ -230,7 +240,7 @@ namespace AppStore
// 现代化内容区域
contentPanel = new Panel();
contentPanel.Dock = DockStyle.Fill;
contentPanel.BackColor = Color.White;
contentPanel.BackColor = ThemeManager.BackgroundColor;
contentPanel.Padding = new Padding(20);
this.Controls.Add(contentPanel);
@@ -238,11 +248,13 @@ namespace AppStore
Panel separator = new Panel();
separator.Dock = DockStyle.Top;
separator.Height = 1;
separator.BackColor = Color.FromArgb(230, 230, 230);
separator.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.FromArgb(230, 230, 230)
: Color.FromArgb(60, 60, 60);
contentPanel.Controls.Add(separator);
this.Controls.Add(buttonPanel);
this.BackColor = Color.White;
this.BackColor = ThemeManager.BackgroundColor;
// 默认显示软件下载视图
ShowAppsView();
@@ -1271,6 +1283,9 @@ namespace AppStore
// 初始化窗体组件
InitializeComponent();
// 应用主题
ThemeManager.ApplyTheme(this);
// 订阅下载管理器事件
DownloadManager.Instance.DownloadAdded += OnDownloadAdded; // 下载添加事件
DownloadManager.Instance.DownloadProgressChanged += OnDownloadProgressChanged; // 下载进度变化事件
@@ -1352,5 +1367,69 @@ namespace AppStore
Logger.Log($"下载完成: {item.FileName}, 状态: {item.Status}"); // 记录日志
item.UpdateDisplay(); // 更新UI显示
}
/// <summary>
/// 主题切换动画效果
/// </summary>
private void AnimateThemeChange()
{
const int animationSteps = 10;
const int animationInterval = 30;
var timer = new System.Windows.Forms.Timer { Interval = animationInterval };
int step = 0;
// 保存当前和目标颜色
var originalBackColor = this.BackColor;
var targetBackColor = ThemeManager.BackgroundColor;
var originalForeColor = this.ForeColor;
var targetForeColor = ThemeManager.TextColor;
timer.Tick += (s, e) => {
if (step >= animationSteps)
{
timer.Stop();
timer.Dispose();
// 确保最终颜色准确
ThemeManager.ApplyTheme(this);
return;
}
// 计算插值比例
float ratio = (float)step / animationSteps;
step++;
// 插值计算新颜色
var newBackColor = Color.FromArgb(
(int)(originalBackColor.R + (targetBackColor.R - originalBackColor.R) * ratio),
(int)(originalBackColor.G + (targetBackColor.G - originalBackColor.G) * ratio),
(int)(originalBackColor.B + (targetBackColor.B - originalBackColor.B) * ratio));
var newForeColor = Color.FromArgb(
(int)(originalForeColor.R + (targetForeColor.R - originalForeColor.R) * ratio),
(int)(originalForeColor.G + (targetForeColor.G - originalForeColor.G) * ratio),
(int)(originalForeColor.B + (targetForeColor.B - originalForeColor.B) * ratio));
// 应用新颜色
this.Invoke((MethodInvoker)delegate {
this.BackColor = newBackColor;
this.ForeColor = newForeColor;
foreach (Control control in this.Controls)
{
control.BackColor = newBackColor;
control.ForeColor = newForeColor;
// 特殊处理按钮的悬停状态
if (control is Button button)
{
button.FlatAppearance.MouseOverBackColor = ThemeManager.ButtonHoverColor;
button.FlatAppearance.MouseDownBackColor = ThemeManager.ButtonActiveColor;
}
}
});
};
timer.Start();
}
}
}

View File

@@ -1,53 +1,88 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
namespace AppStore
{
public class SettingsUserControl : UserControl
{
private Button btnCleanLogs;
public SettingsUserControl()
{
this.Dock = DockStyle.Fill;
this.BackColor = Color.White;
// 设置顶部内边距
this.Padding = new Padding(0, 30, 0, 0);
btnCleanLogs = new Button();
btnCleanLogs.Text = "清理日志";
btnCleanLogs.Size = new Size(150, 40);
btnCleanLogs.Location = new Point((this.Width - 150) / 2, 50); // 调整Y坐标为50靠近顶部
btnCleanLogs.Font = new Font("Microsoft YaHei", 10);
btnCleanLogs.Anchor = AnchorStyles.Top; // 添加顶部锚点
btnCleanLogs.Click += (s, e) => CleanLogs();
this.Controls.Add(btnCleanLogs);
}
private void CleanLogs()
{
try
{
string logCleanerPath = Path.Combine("resource", "log_cleaner.exe");
if (File.Exists(logCleanerPath))
{
Process.Start(logCleanerPath);
MessageBox.Show("日志清理程序已启动", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("日志清理程序未找到", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
Logger.LogError("清理日志时出错", ex);
MessageBox.Show($"清理日志时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
using System.Drawing;
namespace AppStore
{
public class SettingsUserControl : UserControl
{
private Button btnCleanLogs;
private Button btnLightTheme;
private Button btnDarkTheme;
public SettingsUserControl()
{
this.Dock = DockStyle.Fill;
ThemeManager.ApplyTheme(this);
// 设置顶部内边距
this.Padding = new Padding(0, 30, 0, 0);
// 主题切换按钮
btnLightTheme = new Button();
btnLightTheme.Text = "浅色模式";
btnLightTheme.Size = new Size(150, 40);
btnLightTheme.Location = new Point((this.Width - 320) / 2, 50);
btnLightTheme.Font = new Font("Microsoft YaHei", 10);
btnLightTheme.Anchor = AnchorStyles.Top;
btnLightTheme.Click += (s, e) => SwitchTheme(ThemeManager.ThemeMode.Light);
this.Controls.Add(btnLightTheme);
btnDarkTheme = new Button();
btnDarkTheme.Text = "深色模式";
btnDarkTheme.Size = new Size(150, 40);
btnDarkTheme.Location = new Point(btnLightTheme.Right + 20, 50);
btnDarkTheme.Font = new Font("Microsoft YaHei", 10);
btnDarkTheme.Anchor = AnchorStyles.Top;
btnDarkTheme.Click += (s, e) => SwitchTheme(ThemeManager.ThemeMode.Dark);
this.Controls.Add(btnDarkTheme);
// 清理日志按钮
btnCleanLogs = new Button();
btnCleanLogs.Text = "清理日志";
btnCleanLogs.Size = new Size(150, 40);
btnCleanLogs.Location = new Point((this.Width - 150) / 2, 110);
btnCleanLogs.Font = new Font("Microsoft YaHei", 10);
btnCleanLogs.Anchor = AnchorStyles.Top;
btnCleanLogs.Click += (s, e) => CleanLogs();
this.Controls.Add(btnCleanLogs);
ThemeManager.ThemeChanged += OnThemeChanged;
}
private void SwitchTheme(ThemeManager.ThemeMode theme)
{
ThemeManager.CurrentTheme = theme;
}
private void OnThemeChanged(ThemeManager.ThemeMode theme)
{
ThemeManager.ApplyTheme(this);
}
private void CleanLogs()
{
try
{
string logCleanerPath = Path.Combine("resource", "log_cleaner.exe");
if (File.Exists(logCleanerPath))
{
Process.Start(logCleanerPath);
MessageBox.Show("日志清理程序已启动", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("日志清理程序未找到", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
Logger.LogError("清理日志时出错", ex);
MessageBox.Show($"清理日志时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

127
ThemeManager.cs Normal file
View File

@@ -0,0 +1,127 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Text.Json;
using System.IO;
namespace AppStore
{
public static class ThemeManager
{
public enum ThemeMode
{
Light,
Dark
}
private static readonly string ThemeConfigPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"zsyg", "kortapp-z", ".date", "theme.json");
private static ThemeMode _currentTheme = LoadTheme();
private static ThemeMode LoadTheme()
{
try
{
if (File.Exists(ThemeConfigPath))
{
var json = File.ReadAllText(ThemeConfigPath);
return JsonSerializer.Deserialize<ThemeMode>(json);
}
}
catch
{
// 忽略错误,使用默认主题
}
return ThemeMode.Light;
}
private static void SaveTheme(ThemeMode theme)
{
try
{
var dir = Path.GetDirectoryName(ThemeConfigPath);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
var json = JsonSerializer.Serialize(theme);
File.WriteAllText(ThemeConfigPath, json);
}
catch
{
// 忽略错误
}
}
// 浅色主题颜色
private static readonly Color LightBackground = Color.FromArgb(255, 255, 255);
private static readonly Color LightControlBackground = Color.FromArgb(240, 240, 240);
private static readonly Color LightText = Color.FromArgb(30, 30, 30);
private static readonly Color LightButtonHover = Color.FromArgb(230, 230, 230);
private static readonly Color LightButtonActive = Color.FromArgb(220, 220, 220);
// 深色主题颜色
private static readonly Color DarkBackground = Color.FromArgb(30, 30, 30);
private static readonly Color DarkControlBackground = Color.FromArgb(45, 45, 45);
private static readonly Color DarkText = Color.FromArgb(240, 240, 240);
private static readonly Color DarkButtonHover = Color.FromArgb(60, 60, 60);
private static readonly Color DarkButtonActive = Color.FromArgb(70, 70, 70);
public static event Action<ThemeMode> ThemeChanged = delegate {};
public static ThemeMode CurrentTheme
{
get => _currentTheme;
set
{
if (_currentTheme != value)
{
_currentTheme = value;
ThemeChanged?.Invoke(value);
SaveTheme(value);
}
}
}
public static Color BackgroundColor =>
_currentTheme == ThemeMode.Light ? LightBackground : DarkBackground;
public static Color ControlBackgroundColor =>
_currentTheme == ThemeMode.Light ? LightControlBackground : DarkControlBackground;
public static Color TextColor =>
_currentTheme == ThemeMode.Light ? LightText : DarkText;
public static Color ButtonHoverColor =>
_currentTheme == ThemeMode.Light ? LightButtonHover : DarkButtonHover;
public static Color ButtonActiveColor =>
_currentTheme == ThemeMode.Light ? LightButtonActive : DarkButtonActive;
public static void ApplyTheme(Control control)
{
ApplyThemeToControl(control);
}
private static void ApplyThemeToControl(Control control)
{
control.BackColor = BackgroundColor;
control.ForeColor = TextColor;
if (control is Button button)
{
button.FlatStyle = FlatStyle.Flat;
button.FlatAppearance.BorderSize = 0;
button.FlatAppearance.MouseOverBackColor = ButtonHoverColor;
button.FlatAppearance.MouseDownBackColor = ButtonActiveColor;
}
foreach (Control childControl in control.Controls)
{
ApplyThemeToControl(childControl);
}
}
}
}

View File

@@ -2,7 +2,7 @@
; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档!
#define MyAppName "kortapp-z"
#define MyAppVersion "1.1.0"
#define MyAppVersion "1.1.1"
#define MyAppPublisher "zsyg"
#define MyAppURL "https://github.com/zs-yg/kortapp-z"
#define MyAppExeName "kortapp.exe"

View File

@@ -2,7 +2,7 @@
; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档!
#define MyAppName "kortapp-z"
#define MyAppVersion "1.1.0"
#define MyAppVersion "1.1.1"
#define MyAppPublisher "zsyg"
#define MyAppURL "https://github.com/zs-yg/kortapp-z"
#define MyAppExeName "kortapp.exe"