# TodoWiz **Repository Path**: haven5/todo-wiz ## Basic Information - **Project Name**: TodoWiz - **Description**: No description available - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-27 - **Last Updated**: 2026-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: 待办, 任务, 小工具 ## README # TodoWiz - 桌面待办任务应用 一个简洁优雅的WPF桌面待办事项应用程序,具有透明窗口效果,专为桌面环境设计。 ## 📋 项目背景 TodoWiz 是一个轻量级的桌面待办事项管理工具,旨在提供简洁高效的任务管理体验。项目采用现代化的WPF技术栈,结合经典的MVVM架构模式,实现了优雅的用户界面和流畅的用户体验。 ### 设计理念 - **简约至上**: 专注于核心功能,避免界面复杂化 - **视觉融合**: 透明玻璃效果与桌面环境完美融合 - **高效操作**: 支持快捷键和拖拽等直观操作方式 - **数据安全**: 本地SQLite存储,确保数据隐私和可靠性 - **现代架构**: 采用MVVM模式和依赖注入等最佳实践 ## 🎨 UI设计亮点 ### 视觉效果 - **浅蓝色主题**: 清新的浅蓝色配色方案,与桌面环境完美融合 - **玻璃质感**: 半透明背景配合柔和阴影,营造现代玻璃效果 - **精致圆角**: 16px窗口圆角,10px卡片圆角,视觉柔和 - **自定义控件**: 重新设计的复选框和按钮,提升交互体验 ### 交互体验 - **动画效果**: 悬停缩放、颜色渐变等流畅动画 - **视觉反馈**: 所有交互都有清晰的视觉反馈 - **点击区域**: 增大的按钮和控件,提高点击准确性 - **状态指示**: 完成任务的斜体和删除线效果 ### 可访问性 - **高对比度**: 文字与背景对比度符合WCAG AA标准 - **清晰字体**: 15px字体,Medium字重,易于阅读 - **工具提示**: 按钮提供悬停提示,增强可用性 - **键盘支持**: 完整的键盘快捷键支持 ## 🏗️ 项目结构 ``` TodoWiz/ ├── Models/ # 数据模型层 │ └── TodoItem.cs # 待办事项实体模型 ├── ViewModels/ # 视图模型层 (MVVM) │ └── MainViewModel.cs # 主窗口视图模型 ├── Views/ # 用户界面层 │ ├── MainWindow.xaml # 主窗口界面定义 │ ├── MainWindow.xaml.cs # 主窗口代码逻辑 │ ├── ReminderDialog.xaml # 提醒设置对话框 │ ├── ReminderDialog.xaml.cs # 提醒对话框逻辑 │ ├── NotificationWindow.xaml # 通知窗口 │ └── NotificationWindow.xaml.cs # 通知窗口逻辑 ├── Services/ # 业务服务层 │ ├── DatabaseService.cs # 数据库服务 │ ├── TodoRepository.cs # 数据访问层 │ ├── TodoService.cs # 业务逻辑层 │ └── ReminderService.cs # 提醒服务 ├── Helpers/ # 辅助工具类 │ ├── TextBoxHelper.cs # TextBox输入辅助工具 │ ├── DragDropHelper.cs # 拖拽排序辅助工具 │ └── DragAdorner.cs # 拖拽视觉反馈 ├── App.xaml # 应用程序资源定义 ├── App.xaml.cs # 应用程序启动逻辑 ├── TodoWiz.csproj # 项目配置文件 └── README.md # 项目说明文档 ``` ### 核心模块说明 #### 1. 数据模型层 (Models) - **TodoItem**: 待办事项的核心实体,包含标题、完成状态、创建时间、优先级、提醒设置等属性 #### 2. 视图模型层 (ViewModels) - **MainViewModel**: 主窗口的业务逻辑控制器,实现MVVM模式中的ViewModel - 管理待办事项集合 - 处理用户命令(添加、删除、切换状态) - 实现数据绑定和界面更新 - 拖拽排序功能 #### 3. 视图层 (Views) - **MainWindow**: 主窗口界面,实现透明效果和用户交互 - 玻璃效果背景 - 可拖拽窗口 - 右键上下文菜单 - 键盘快捷键支持 - 系统托盘集成 - **ReminderDialog**: 提醒设置对话框 - 每日提醒设置 - 指定日期提醒设置 - 现代化 UI 设计 - **NotificationWindow**: 通知窗口 - 右下角弹出显示 - 透明玻璃效果 - 多行文本支持 #### 4. 服务层 (Services) - **DatabaseService**: 数据库连接和初始化(单例模式) - **TodoRepository**: 数据访问对象,负责CRUD操作 - **TodoService**: 业务逻辑服务,协调数据和视图 - **ReminderService**: 后台提醒服务 - 每分钟检查提醒 - 自动弹出通知窗口 - 防止重复提醒 #### 5. 辅助工具 (Helpers) - **TextBoxHelper**: 输入框占位符文本功能扩展 - **DragDropHelper**: 拖拽排序功能辅助工具 - **DragAdorner**: 拖拽时的视觉反馈效果 ## 🎯 功能特点 - ✅ **新建待办事项**: 快速添加新的任务 - 🔄 **任务管理**: 完成任务、删除任务、清除已完成任务 - 🖱️ **拖拽移动**: 可以自由拖动窗口到桌面任意位置 - ↕️ **拖拽排序**: 支持拖拽调整任务顺序 - 🎨 **透明显示**: 半透明玻璃效果,融入桌面环境 - ⌨️ **键盘快捷键**: 支持快捷键操作 - 💾 **本地存储**: 使用SQLite数据库本地存储数据 - 🔄 **实时更新**: 即时保存和同步 - 🖥️ **系统托盘**: 支持最小化到系统托盘,后台运行 - ⏰ **提醒功能**: - 每日提醒:每天固定时间提醒 - 指定日期提醒:在特定日期时间提醒 - 弹窗通知:右下角弹出精美通知窗口 - 防重复提醒:智能防止重复通知 - 🔢 **优先级设置**: 三级优先级(低、中、高) ## 快捷键 - `T` - 切换置顶显示 - `Enter` - 添加新待办事项 - `R` - 刷新列表 - `C` - 清除已完成的任务 - `Escape` - 最小化到托盘 - `鼠标拖拽` - 移动窗口位置 - `右键点击` - 打开上下文菜单 ## 窗口控制 - **置顶按钮** (📌/📍) - 点击切换窗口置顶状态 - **关闭按钮** (✕) - 最小化到系统托盘 - **默认状态**: 不置顶,可被其他窗口遮挡 ## 系统托盘 - **双击托盘图标** - 恢复窗口显示 - **托盘图标右键菜单**: - 📝 显示窗口 - 📌 置顶显示 - 🔄 刷新任务 - ❌ 退出应用 - **点击关闭按钮** - 最小化到托盘而非关闭 ## 技术栈 - **框架**: .NET 8 WPF - **架构模式**: MVVM (CommunityToolkit.Mvvm 8.2.2) - **数据库**: SQLite + SqlSugar ORM (5.1.4.213) - **系统托盘**: Hardcodet.NotifyIcon.Wpf (1.1.0) - **数据存储**: Local App Data ## 🏛️ 技术架构 ### MVVM架构模式 TodoWiz采用经典的MVVM (Model-View-ViewModel) 架构模式: ``` ┌─────────────────┐ │ View │ ← MainWindow.xaml + .cs │ (用户界面) │ └────────┬────────┘ │ 数据绑定 ↓ ┌─────────────────┐ │ ViewModel │ ← MainViewModel.cs │ (业务逻辑) │ └────────┬────────┘ │ 服务调用 ↓ ┌─────────────────┐ │ Model │ ← TodoItem.cs │ (数据模型) │ └─────────────────┘ ↑ │ ┌─────────────────┐ │ Repository │ ← TodoRepository.cs │ (数据访问) │ └─────────────────┘ ``` ### 数据流设计 1. **用户交互** → View层接收用户操作 2. **命令绑定** → ViewModel处理业务逻辑 3. **服务调用** → Service层协调数据操作 4. **数据访问** → Repository层执行数据库操作 5. **模型更新** → Model层数据变更 6. **界面刷新** → 通过数据绑定自动更新View ### 核心技术实现 #### 透明窗口技术 ```csharp AllowsTransparency="True" // 启用透明 WindowStyle="None" // 无边框样式 Background="Transparent" // 透明背景 Topmost="True" // 窗口置顶 ``` #### 数据绑定 ```csharp // CommunityToolkit.Mvvm 特性 [ObservableProperty] private ObservableCollection _todoItems; [RelayCommand] private void AddTodo() { } ``` #### SQLite数据访问 ```csharp // SqlSugar ORM 简化数据操作 var db = DatabaseService.GetInstance(); var todos = db.Queryable().ToList(); ``` ## 构建和运行 1. 确保已安装 .NET 8 SDK 2. 运行项目: ```bash dotnet run ``` 3. 或者构建可执行文件: ```bash dotnet build -c Release ``` ## 数据存储位置 数据存储在: `%AppFolder%\TodoWiz\todowiz.db` ## 开发状态 项目处于积极开发阶段,核心功能已实现,持续优化中。 ## 未来计划 - [ ] 待办事项分类/标签 - [x] 提醒通知功能 ✅ - [ ] 主题切换 - [ ] 数据导入/导出 - [x] 系统托盘图标 ✅ - [ ] 多语言支持 - [ ] 云同步功能 - [ ] 统计分析 ## 🛠️ 开发指南 ### 环境要求 - **操作系统**: Windows 10/11 - **开发工具**: Visual Studio 2022 或 VS Code + C# Dev Kit - **运行时**: .NET 8.0 Runtime - **开发SDK**: .NET 8.0 SDK ### 项目配置 项目使用C# 10.0的特性和.NET 8.0的目标框架: ```xml net8.0-windows enable enable true ``` ### 扩展开发 #### 添加新功能 1. **添加新数据模型** → 在`Models/`文件夹创建新类 2. **创建Repository** → 在`Services/`文件夹添加数据访问类 3. **实现Service** → 在`Services/`文件夹添加业务逻辑 4. **扩展ViewModel** → 在`ViewModels/`文件夹添加新命令和属性 5. **更新UI** → 在`Views/`文件夹修改XAML界面 #### 代码风格规范 - **命名规范**: 使用PascalCase命名类和方法,camelCase命名局部变量 - **MVVM规范**: UI逻辑放在View,业务逻辑放在ViewModel - **异步处理**: 数据库操作建议使用async/await模式 - **错误处理**: 添加适当的异常处理和用户提示 ### 调试技巧 1. **输出窗口**: 查看数据绑定错误和异常信息 2. **断点调试**: 在ViewModel和Service中设置断点 3. **数据库检查**: 使用SQLite工具查看`todowiz.db`内容 4. **日志记录**: 可添加日志记录应用运行状态 ### 部署说明 #### 开发版本 ```bash dotnet run # 运行调试版本 dotnet build # 构建项目 ``` #### 发布版本 ```bash dotnet publish -c Release # 发布独立可执行文件 ``` #### 依赖文件 发布后的应用程序需要以下文件: - `TodoWiz.exe` - 主程序文件 - 相关DLL依赖文件 - `app.manifest` - 应用清单文件 ### 常见问题 **Q: 如何修改窗口大小?** A: 在`MainWindow.xaml`中修改`Width`和`Height`属性。 **Q: 如何更换主题颜色?** A: 在`App.xaml`的``中修改颜色值,或在各个窗口的 XAML 中修改样式。 **Q: 数据库文件在哪里?** A: 默认位于`%LocalAppData%\TodoWiz\todowiz.db`(例如:`C:\Users\用户名\AppData\Local\TodoWiz\todowiz.db`)。 **Q: 如何设置提醒?** A: 右键点击任务,选择"设置提醒",在弹出对话框中选择每日提醒或指定日期提醒。 **Q: 提醒不工作怎么办?** A: 确保应用正在运行(未最小化到托盘或托盘图标存在),检查提醒时间和日期设置是否正确。 **Q: 如何调整任务顺序?** A: 使用鼠标拖拽任务项即可调整顺序。 **Q: 支持多语言吗?** A: 目前仅支持中文,多语言支持在计划中。 ## 📄 许可证 本项目为开源项目,欢迎贡献代码和提出建议。 ## 👥 贡献 欢迎提交Issue和Pull Request来改进这个项目! --- **TodoWiz** - 让桌面待办管理变得简单优雅 🎉