README (#1)
Sucre opened 1 month ago

TodoList - 桌面待办事项管理

一个功能丰富的 Windows 桌面待办事项应用,基于 .NET 8 + WPF + WPF-UI (Fluent Design) 开发。


功能一览

📋 事项管理

  • 快速添加事项,支持回车添加
  • 编辑标题、描述、截止日期、优先级、颜色、标签
  • 设置优先级(无 / 低 / 中 / 高 / 紧急),以颜色徽章区分
  • 自定义颜色标记(7 种预设色 + 自定义色盘)
  • 多标签管理,支持新建标签和选择已有标签
  • 拖拽排序,自由调整事项顺序
  • 批量管理:一键批量修改分类、标签、优先级、颜色、日期、完成状态和删除

🔄 重复事项

  • 支持每天 / 每周 / 每月 / 每年重复
  • 可设置重复间隔(如每 2 天、每 3 周)
  • 可设置重复次数或截止日期,先到先停
  • 完成后自动创建下一期,所有属性自动继承

🔔 提醒系统

  • 为事项设置提醒时间(日期 + 时 / 分)
  • 有截止日期时自动基于截止日期设置提醒
  • 三种提醒方式可选:应用内弹窗 / 系统通知 / 两者兼用
  • 弹窗支持:稍后提醒(+10分钟)、标记完成、关闭
  • 系统通知支持点击交互操作

🔗 智能链接识别

  • 在事项描述中输入 URL,自动识别并显示为可点击链接
  • 事项列表中自动显示 🔗 图标,点击直接跳转浏览器
  • 支持 http / https 链接自动提取

📂 分类管理

  • 自由创建、编辑、删除分类
  • 每个分类支持自定义颜色,选中时底色联动
  • 双击分类名称可编辑名称和颜色
  • 「未分类」为系统兜底分类,删除分类时事项自动归入
  • 「未分类已完成」专门收纳未分类下完成的事项

📅 日历视图

  • 列表视图与日历视图一键切换
  • 日历格子内显示当日事项,带颜色标记
  • 点击日期选中,再次点击查看当日事项详情
  • 支持事项在日历中拖拽移动到其他日期
  • 拖拽时显示跟随鼠标的虚影效果

🖥️ 桌面小组件

  • 独立悬浮窗,可置顶、拖动、调整大小
  • 自定义背景颜色和透明度
  • 按日期 / 分类 / 标签分组显示
  • 内置日历视图,支持快速勾选完成
  • 窗口位置和设置自动保存和恢复
  • 与主窗口数据实时同步

⚙️ 设置中心

  • 全局:关闭时最小化到托盘、开机自启动
  • 事项:默认分类、默认日期、单击/双击编辑、批量模式、ESC退出批量、日历编辑模式、提醒方式
  • 标签:标签的添加 / 编辑 / 删除
  • 数据:手动备份、自动备份(每周 / 每月 / 自定义周期)、管理备份列表、打开备份文件夹、数据清除
  • 关于:版本信息与技术栈

📌 系统托盘

  • 应用启动后常驻系统托盘
  • 双击托盘图标恢复主窗口
  • 右键托盘菜单(显示主窗口 / 退出)
  • 可在设置中选择关闭窗口时最小化到托盘或直接退出

使用指南

快速开始

  1. 启动应用 — 双击运行,主窗口显示默认分类和事项列表
  2. 添加事项 — 在顶部输入框输入标题,按 Enter 或点击 +
  3. 编辑事项 — 单击事项打开编辑窗口(可在设置中改为双击)

管理事项

操作方法
编辑事项单击(或双击)事项卡片
完成事项点击事项左侧的勾选框
删除事项点击事项右侧的删除图标
拖拽排序按住事项上下拖动
打开链接描述中有链接时,点击 🔗 图标

分类管理

操作方法
添加分类左侧输入分类名,按 Enter 或点击 +
编辑分类双击左侧分类名,或点击右侧标题
删除分类点击分类右侧的 ✕ 按钮
切换分类单击左侧分类列表项

批量操作

  1. 点击顶部 批量 按钮进入批量模式(或多选自动进入)
  2. 通过点击或 Ctrl + 单击 选择多个事项
  3. 底部操作栏可批量:修改分类、标签、优先级、颜色、日期、切换完成、删除
  4. ESC 退出批量模式

日历视图

  1. 点击顶部 日历 按钮切换到日历视图
  2. 单击日期选中,添加事项时自动设为该日期
  3. 再次点击已选中日期,查看当日事项详情
  4. 可在日历格子间拖拽事项来调整日期

提醒功能

  1. 编辑事项 → 设置提醒时间(时:分)
  2. 有截止日期时提醒基于截止日期,无截止日期需手动选择提醒日期
  3. 到达提醒时间后弹窗通知,可选择:
    • 稍后提醒 — 延后 10 分钟再提醒
    • 标记完成 — 直接完成该事项
    • 关闭 — 本次不再提醒

重复事项

  1. 编辑事项 → 选择重复类型(每天 / 周 / 月 / 年)
  2. 可设置间隔(如每 2 天)、次数、截止日期
  3. 完成事项后自动创建下一期,标题、描述、标签等全部继承

桌面小组件

  1. 左下角点击 桌面小组件 打开悬浮窗
  2. 右键小组件打开设置:分组方式、置顶、背景色、透明度
  3. 窗口可自由拖动和缩放,位置自动保存

数据管理

  • 手动备份:设置 → 数据 → 备份数据
  • 自动备份:设置 → 数据 → 开启自动备份,选择周期
  • 恢复数据:设置 → 数据 → 管理备份 → 选择备份文件恢复
  • 清除数据:设置 → 数据 → 输入「删除数据」确认后清除

技术栈

组件技术
框架.NET 8 + WPF
UI 库WPF-UI 3.0.5 (Fluent Design)
数据库SQLite(Entity Framework Core 8)
架构MVVM(CommunityToolkit.Mvvm)
拖拽GongSolutions.WPF.DragDrop 4.0.0
通知Microsoft.Toolkit.Uwp.Notifications
数据同步EventBus 静态事件
设置存储JSON(AppData 目录)
安装包Inno Setup

编译运行

前提条件

开发运行

cd TodoList
dotnet restore
dotnet run

发布

便携版(单文件):

dotnet publish -c Release -r win-x64 --self-contained /p:Portable=true

安装版(需要 Inno Setup):

dotnet publish -c Release -r win-x64 --self-contained
# 然后运行 Inno Setup 编译 installer.iss

支持在 macOS / Linux 上交叉编译 Windows 版本(已启用 EnableWindowsTargeting),但产物仅可在 Windows 上运行。

项目结构

TodoList/
├── App.xaml/.cs                        # 应用入口(自动备份、初始化)
├── Models/
│   └── Models.cs                       # 数据模型(Category, Tag, TodoItem)
├── Data/
│   └── TodoDbContext.cs                # EF Core 数据库上下文 + 自动迁移
├── ViewModels/
│   ├── MainViewModel.cs                # 主视图模型
│   └── MainViewModel.DragDrop.cs       # 拖拽排序处理
├── Views/
│   ├── MainWindow.xaml/.cs             # 主窗口(列表/日历/批量/托盘)
│   ├── CalendarGridView.xaml/.cs       # 日历格子视图(拖拽支持)
│   ├── TodoDetailWindow.xaml/.cs       # 事项编辑窗口
│   ├── DayDetailWindow.xaml/.cs        # 日历日期详情
│   ├── WidgetWindow.xaml/.cs           # 桌面小组件
│   ├── WidgetSettingsWindow.xaml/.cs   # 小组件设置
│   ├── SettingsWindow.xaml/.cs         # 设置窗口
│   ├── ReminderWindow.xaml/.cs         # 提醒弹窗
│   ├── BackupListWindow.xaml/.cs       # 备份管理窗口
│   ├── CategoryEditDialog.xaml/.cs     # 分类编辑对话框
│   ├── ColorPickerDialog.xaml/.cs      # 颜色选择器
│   ├── BatchSelectWindow.xaml/.cs      # 批量选择窗口
│   ├── BatchDateWindow.xaml/.cs        # 批量日期选择
│   ├── InputDialog.xaml/.cs            # 通用输入对话框
│   ├── ConfirmDialog.xaml/.cs          # 确认对话框
│   └── TagManagerWindow.xaml/.cs       # 标签管理窗口
├── Converters/
│   └── Converters.cs                   # 值转换器
├── Helpers/
│   ├── ViewModelBase.cs                # MVVM 基类
│   ├── EventBus.cs                     # 事件总线(跨窗口同步)
│   ├── AppSettings.cs                  # 应用设置(JSON 持久化)
│   ├── AppPaths.cs                     # 路径管理
│   ├── LinkHelper.cs                   # URL 链接识别提取
│   ├── TitleBarFix.cs                  # FluentWindow 标题栏修复
│   ├── ReminderService.cs              # 提醒服务(定时检查)
│   └── RepeatService.cs               # 重复事项服务
└── Assets/
    └── todolist.ico                    # 应用图标

License

© 2026 JasperJiang. All Rights Reserved.

  • Sucre changed state to 'Closed' 1 month ago
    Previous Value Current Value
    Open
    Closed
  • Sucre changed state to 'Open' 2 weeks ago
    Previous Value Current Value
    Closed
    Open
issue 1/1
Type
New Feature
Priority
Normal
Assignees
Not assigned
Issue Votes (0)
Watchers (1)
Reference
TodoList#1
Please wait...
Page is in error, reload to recover