如何保存WPF UI状态?

2024-04-11

我有一个TabControl在它下面我有几个元素,例如TreeView and DataGrid。当我展开树并调整数据网格列的大小时,如果我然后切换到另一个选项卡并返回,整个 UI 状态都会被忘记。我必须重新展开树并调整列的大小。

是否有一种合理且现有的方法来保存 UI 状态?让我们把它分为——

  1. 临时(在内存中)和
  2. 永久(在磁盘上)。

要保存状态,您可以绑定相关控件(Width, Height, IsSelected等)属性到您的绑定源的属性(即 MVVM 中的 ViewModel),这将自动保存您的临时状态;为了永久保存,您可以序列化 ViewModel 并将其保存在磁盘上,并在需要时加载它。

就像保存你可以拥有的树视图状态一样IsExpanded and IsSelected您的对象(ViewModel)中的属性TreeView一定会喜欢这样的——

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>

您还可以使用项目设置来保存应用程序的状态, 看看这个问题 -

c# - 在 WPF 应用程序中保存用户设置的方法? https://stackoverflow.com/questions/3784477/c-sharp-approach-for-saving-user-settings-in-a-wpf-application/3784591#3784591

以及这篇文章——应用的用户设置 http://www.codeproject.com/Articles/25829/User-Settings-Applied

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何保存WPF UI状态? 的相关文章

随机推荐

  • 使用 py2neo 在 neo4j 上查询写入性能

    目前 我正在努力寻找一种高性能的方法 使用 py2neo 运行多个查询 我的问题是 python 中有一大堆需要写入 neo4j 的写入查询 我现在尝试了多种方法来解决这个问题 对我来说最好的工作方法如下 from py2neo impor
  • 在 ninja/cmake 中操纵独立目标的构建顺序

    我正在开发一个使用 cmake ninja 构建的 C 项目 在 64 线程计算机上有大约 1200 个构建目标 有一个翻译单元需要 10 分钟来编译 大多数其他单元都相对较快 因此所有其他目标的构建一起只需要大约 9 分钟 在所有线程上构
  • 通过对具有匹配 id 编号的对象进行分组来重建 NSArray?

    我有一个 NSArray 数组中的每个对象都有一个 groupId 和一个名称 每个对象都是唯一的 但有许多对象具有相同的 groupId 有没有办法可以将数组分开并重建它 以便将名称分组到具有相应 groubId 的单个对象中 这是数组当
  • 获取密封特征的子类

    是否有可能 通过宏 某种形式的无形状自动魔法或其他形式 获得密封特征的子类列表 在编译时 在运行时 您不需要任何第三方库来执行此操作 sealed trait MyTrait case object SubClass1 extends My
  • 使用 C# 搜索 CSV 文件并提取旁边列中的值

    我正在尝试编写一个我正在编写的程序 Visual Studio 中的 C 在外部 CSV 文件中查找值 并将下一列中的值拉回到我的 WinForm 中的标签中 我的 CSV 文件是使用虚拟数据进行的测试 如下 gt old newuser
  • 如何获取 pexpect 日志文件中的时间戳

    我在用pexpect处理我的 telnet 和 ssh 通信 我还将所有请求 响应写入logfile using pexpect logfile filename 我想拥有时间戳也在日志文件中 我在文档中找不到它 有谁知道如何实现此功能 l
  • 这就是 C 中 + 运算符的实现方式吗?

    当理解原始运算符如 and 是用C实现的 我发现了以下片段一个有趣的答案 https stackoverflow com a 11694778 5399734 replaces the operator int add int x int
  • 从抓取的网页获取页面标题[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions var h
  • 在各种浏览器中用javascript读取客户端的文件内容

    我试图提供一个仅脚本的解决方案 用于通过浏览器读取客户端计算机上的文件内容 我有一个适用于 Firefox 和 Internet Explorer 的解决方案 这并不漂亮 但我现在只是在尝试 function getFileContents
  • 当 Window AllowsTransparency = true 时,WPF 是否硬件加速?

    我一直在考虑在 WPF 中制作自己的窗口框架 类似于 Visual Studio 我已阅读该设置AllowsTransparency true将强制 WPF 以软件模式呈现 这个例子 https wpfwindow codeplex com
  • LINQ 中的多个左联接

    我正在尝试将 SQL 查询转换为 LINQ 但无法正确获取语法 我原来的 工作的 SQL 查询是 SELECT a PersonnelNumber a LastName a FirstName a MiddleInitial b Title
  • Apollo Android 客户端 - 无法访问类路径上生成的类

    我已经成功生成了 Apollo 类 并且可以在构建目录中看到它们 但是它们在类路径上不可用 奇怪的是 生成的枚举可用 但类本身不可用 运行 Apollo 的 Github 上提供的示例项目确实有效 但我看不到配置之间的差异 下面是麦克维 h
  • 在 PostgreSQL 中创建具有加密密码的用户

    是否可以在 PostgreSQL 中创建用户而不提供纯文本密码 理想情况下 我希望能够创建一个仅提供使用 sha 256 加密的密码的用户 我想做的是创建一个具有类似内容的用户 CREATE USER martin WITH PASSWOR
  • Android Material Design 示例代码给出缺少资源错误

    我正在尝试运行从下面相同的 Android 材料设计https github com material components material components android https github com material com
  • 我可以在 Rust 中将字符串转换为枚举而不使用宏吗?

    例如 如果我有如下代码 enum Foo Bar Baz Bat Quux impl Foo from input str gt Foo Foo input 这显然会失败 因为input不是 Foo 的方法 我可以手动输入 from inp
  • 如何处理错误并正确使用 Promise

    首先 我正在对我发布的这个问题进行跟进不久前 https stackoverflow com questions 53940043 unhandledpromiserejectionwarning this error originated
  • 如何从 VIM 运行 C 程序?

    有没有一种方法可以从 VIM 编译并运行 C 程序而无需输入文件名 gcc o somename somename使用时 将替换为当前打开的文件的名称 当你的项目变得更大时 你还可以编写一个makefile并编译当前项目 make 如果有任
  • 如何加载高分辨率图像Windows Phone任务代理? [内存不足]

    众所周知 Windows Phone 8 任务代理只能使用 11 5MB 内存 我试图在后台任务代理中制作动态锁屏图像 当我得到 480 800 图像时 它工作正常 但当我将其更改为 768 1280 时 出现异常 内存不足 1 像素投射
  • 如何循环遍历 Golang 结构体中的字段以可扩展的方式获取和设置值?

    我有一个结构体 Person type Person struct Firstname string Lastname string Years uint8 然后我有这个结构的两个实例 PersonA 和 Person PersonA Ob
  • 如何保存WPF UI状态?

    我有一个TabControl在它下面我有几个元素 例如TreeView and DataGrid 当我展开树并调整数据网格列的大小时 如果我然后切换到另一个选项卡并返回 整个 UI 状态都会被忘记 我必须重新展开树并调整列的大小 是否有一种