如何保存 WPF UI 状态?

Posted

技术标签:

【中文标题】如何保存 WPF UI 状态?【英文标题】:How to save WPF UI state? 【发布时间】:2012-06-25 12:20:33 【问题描述】:

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

是否有一种明智且现有的方法来保存 UI 状态?让我们把它分成-

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

【问题讨论】:

【参考方案1】:

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

为了保存你的树视图状态,你可以在你的TreeView 绑定的对象(ViewModel)中拥有IsExpandedIsSelected 属性-

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

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

c# - approach for saving user settings in a WPF application?

还有这篇文章-User Settings Applied

【讨论】:

那么,我会将我希望保存的所有属性放入我的视图模型中吗?我认为我的视图模型很快就会变得臃肿。是否有一种通用的方法可以在这里采取 - 即我有两个树视图,所以我是否要在 IsExpanded 属性前面加上 FooTreeViewIsExpandedBarTreeViewIsExpanded @rFactor - 不,IsExpanded 属性将转到 TreeViewItem 的模型;看这篇文章的解释 - Simplifying the WPF TreeView by Using the ViewModel Pattern @rFactor - 如果您想保存控件/窗口的大量状态,则可以使用 ProjectSettings 方法;请参阅答案中提供的链接。

以上是关于如何保存 WPF UI 状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用“文本输入”以“状态”更改和保存嵌套数据

如何将 WPF UI 转换为 MAUI UI

WPF 根据 UI 线程控制状态更新 NON UI 线程数据

@State 属性如何不保存状态?

如何以编程方式导航 WPF UI 元素制表位?

WPF 如何创建这样的横向菜单(Modern-UI)