5分钟上手Jot:快速实现WPF窗口大小与位置的自动记忆

📅 2026/8/21 15:58:14
5分钟上手Jot:快速实现WPF窗口大小与位置的自动记忆
5分钟上手Jot快速实现WPF窗口大小与位置的自动记忆【免费下载链接】JotJot is a library for persisting and applying .NET application state.项目地址: https://gitcode.com/gh_mirrors/jot1/Jot每次打开应用都要重新拖动窗口、调整大小WPF窗口大小与位置的自动记忆其实用 Jot 这个轻量级 .NET 状态持久化库几行代码就能轻松实现。Jot 是一个专门解决 .NET 应用状态保存问题的开源库支持 WPF、WinForms 与 Avalonia UI。本文用5分钟带你快速上手彻底告别繁琐的 settings 文件读写代码。Jot是什么WPF状态持久化的终极方案Jot 是一个开源的 .NET 状态持久化库基于 netstandard2.0兼容 .NET Framework、.NET Core 与 .NET 5。它要解决的痛点非常朴素几乎每个应用都需要记住自己的样子——窗口大小、窗口位置、用户上次输入的数据、选项卡索引、用户偏好……传统做法是用 .settings 文件手动读写每个属性一个窗口的属性甚至要在五个地方重复出现写起来枯燥且极易出错。Jot 的做法完全不同只需声明要跟踪哪些对象的哪些属性、何时保存剩下的读写交给库自动完成。对比项传统 settings 文件Jot声明方式每个属性写 5 处每个属性写 1 处代码量大量样板代码几行配置出错率高字段多易漏写低多显示器适配需要自己处理内置支持一键安装NuGet安装Jot只需1分钟在 Visual Studio 中打开程序包管理器控制台输入下面这一行命令即可install-package Jot安装完成后在代码中using Jot;就能开始使用。Jot 的核心类只有一个非常轻量几乎不增加项目负担。最快配置方法三步实现WPF窗口大小位置自动记忆第一步创建全局Tracker并配置窗口跟踪规则在应用启动处通常写在一个静态Services类中创建唯一的 Tracker 实例并告诉它如何跟踪所有 Window 对象static class Services { public static Tracker Tracker new Tracker(); static Services() { Tracker.ConfigureWindow() .Id(w w.Name) // 用窗口名作为唯一标识 .Properties(w new { w.Top, w.Left, w.Width, w.Height, w.WindowState }) .PersistOn(nameof(Window.Closing)); // 窗口关闭时自动保存 } }这段配置的含义是跟踪窗口的上下左右位置、宽高以及最大化/最小化状态并在窗口关闭时自动把状态写入磁盘。第二步在窗口构造函数中启动跟踪在 MainWindow 构造函数里只需加一行代码public MainWindow() { InitializeComponent(); Services.Tracker.Track(this); // 自动应用上次记忆的状态并开始监听 }第三步运行验证按下 F5 运行程序随意拖动窗口、调整大小、最大化或最小化然后关闭程序再次启动——窗口会精准恢复到上次的位置和大小。整个核心代码不到 10 行完成仓库自带的 WPF 演示项目可以直接参考并运行相关文件为Demo/TestWPF/Services.cs和Demo/TestWPF/MainWindow.xaml.cs。进阶技巧多显示器环境下避免窗口丢失拔掉外接显示器后如果窗口还被记忆在不存在的屏幕上就会出现窗口找不回来的尴尬。解决办法很简单把屏幕分辨率加入窗口标识Id的命名空间Jot 就会为每种屏幕配置分别记忆状态Tracker.ConfigureWindow() .Id(w w.Name, SystemInformation.VirtualScreen.Size) // 屏幕分辨率参与标识 .Properties(w new { w.Top, w.Left, w.Width, w.Height, w.WindowState }) .PersistOn(nameof(Window.Closing));换了一个分辨率就会自动套用一套全新的位置记忆窗口永远不会跑丢这个细节非常实用。数据存在哪里揭开JSON存储机制Jot 默认使用内置的JsonFileStore源码见Jot/Storage/JsonFileStore.cs将数据以 JSON 文件形式保存在%AppData%\[公司名]\[应用名]\[窗口名].json每个被跟踪的对象对应一个独立的 JSON 文件读写互不干扰、速度更快。如果你希望换一个存储位置只需给 Tracker 传入自定义路径var tracker new Tracker(new JsonFileStore(D:\AppState\));甚至可以实现简单的IStore接口把状态存进数据库或云端实现多设备之间的设置同步。不止窗口还能自动记忆这些UI状态Jot 的跟踪能力远不止窗口位置凡是可读写的属性都能记选项卡选中项记住用户停留在哪个 TabDataGrid 列宽记住用户调整过的列宽应用设置对象如用户名、最近打开的文件列表以 WPF Demo 中的写法为例在窗口跟踪之外再补充两个属性即可见Demo/TestWPF/MainWindow.xaml.csServices.Tracker.ConfigureMainWindow() .Property(w w.tabControl.SelectedIndex, SelectedTab) .Property(w w.firstCol.Width);另外在应用退出时调用一次Tracker.PersistAll()可以一次性保存所有仍在跟踪的对象非常省心。常见问题FAQQ什么时候触发保存A默认在窗口Closing事件时自动保存也可以用PersistOn绑定任意事件或手动调用Persist/PersistAll主动保存。Q如何清除窗口的记忆A调用Tracker.Forget(窗口对象)即可清除该对象已保存的状态下次启动时恢复默认位置。Q支持 WinForms 吗A支持仓库中的Demo/TestWinForms提供了完整示例。注意 WinForms 需要在OnLoad中启动跟踪并对最大化/最小化时的尺寸数据做过滤。Q想查看完整源码和 Demo 怎么办A可以克隆仓库git clone https://gitcode.com/gh_mirrors/jot1/Jot内含 WPF 与 WinForms 两个可直接运行的演示项目。总结5分钟时间你已经掌握了用 Jot 实现WPF 窗口大小与位置的自动记忆一次全局配置 一行Track调用从此告别手写 settings 代码。Jot 轻量、易用、可扩展是提升桌面应用体验的利器。现在就动手试试吧【免费下载链接】JotJot is a library for persisting and applying .NET application state.项目地址: https://gitcode.com/gh_mirrors/jot1/Jot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考