UWP/WinRT:如何保存然后恢复简单的文本框以从终止状态恢复?

2023-12-26

In 这个文件 https://msdn.microsoft.com/en-us/library/windows/apps/xaml/mt243287.aspx在描述 Windows 10 UWP 应用程序的生命周期时,它指出:

用户现在希望您的应用程序在设备上执行多任务时能够记住其状态。例如,他们希望页面滚动到相同的位置,并且所有控件都处于与以前相同的状态。通过了解启动、挂起和恢复的应用程序生命周期,您可以提供这种无缝行为。

然而,似乎没有太多关于如何实现这一目标的文档。我认为所有内容都是由应用程序开发人员手动保存的,然后在恢复时使用应用程序挂起时隐藏的任​​何数据从头开始重新创建,所有这些都是为了造成应用程序的确切内存状态从未改变的错觉。

我试图仅使用一个最小的示例(一个仅包含 TextBox 的 XAML 页面)来解决这个问题。但即使在这种情况下,我还是有点难以理解如何实现目标。我将提供更一般的想法,但我的具体问题只是如何保存然后恢复一个简单的文本框以从终止状态恢复?我正在使用 C++/CX 工作,但会寻求我能得到的任何帮助。

到目前为止,我对此的想法如下:

  • At minimum, obviously the text of the TextBox has to be saved.
    • 这可以保存到ApplicationData::Current->LocalSettings.
    • 我立即看到的一个问题是,我上面引用的有关生命周期的文档指出,应用程序必须在挂起信号或面临终止后的 5 秒内完成保存。文本框可能会保存大量数据,导致在繁忙的 IO 情况下可能会导致保存被切断,特别是如果我们开始扩展到微不足道的单个 TextBox 情况之外。
    • 幸运的是,该文档指出,“我们建议您为此目的使用应用程序数据 API,因为它们保证在应用程序进入挂起状态之前完成。有关详细信息,请参阅使用 UWP 应用程序访问应用程序数据。”不幸的是,当您点击该链接时,没有任何相关内容提供更多详细信息,而且我在 API 中找不到任何记录此行为的内容。通过保存到ApplicationData::Current->LocalSettings我们是否不会因为数据损坏或丢失而被切断电源?
  • Once the minimum has been taken care of, next we'll probably need extras like cursor and window position.
    • 我们可以通过以下方式获取光标位置TextBox->SelectionStart据我所知,返回当前光标位置的用法在 API 中没有记录。这似乎也很适合存储为int into ApplicationData::Current->LocalSettings.
    • 我们如何获取、保存和恢复TextBox窗口的滚动位置?
  • 现在我们已经有了额外的东西,那么困难的东西怎么样,比如撤消历史记录?我假设这是不可能的我在 Stackoverflow 上的问题 https://stackoverflow.com/questions/31886766/uwp-winrt-how-to-enable-undo-hooks-on-a-textbox关于如何访问文本框的撤消功能尚未得到答案。尽管如此,如果他们切换到另一个应用程序,然后回来认为由于我们实现了完美且无缝的终止恢复,该应用程序从未关闭,并且他们的撤消历史记录已被清除,那么用户体验确实很差。
  • 是否还需要为文本框保存其他内容才能创建理想的用户体验?我错过了什么还是有更简单的方法来完成这一切?像 Microsoft 的 Edge 浏览器这样的东西如何处理复杂的情况,其中有数十个选项卡、表单输入、滚动位置等都需要在 5 秒内保存?

The 应用程序生命周期 https://msdn.microsoft.com/en-us/library/windows/apps/xaml/mt243287.aspx您引用的文档已针对 Windows 10 进行了更新,但似乎丢失了您想知道的一些重要内容。

我发现了一篇旧博文,管理应用程序生命周期,让您的应用程序感觉“永远活着” http://blogs.msdn.com/b/windowsappdev/archive/2012/04/10/managing-app-lifecycle-so-your-apps-feel-quot-always-alive-quot.aspx,这似乎是您链接的灵感。

在博客文章的最后,有一段内容如下:

在正确的时间保存正确的数据

在应用程序的整个生命周期中始终增量保存重要数据。由于您的应用程序只有最多五秒的时间来运行挂起事件处理程序代码,因此您需要确保重要的应用程序数据在挂起时已保存到持久存储中。

在编写应用程序时,您需要管理两种类型的数据:会话数据和用户数据。会话数据是与用户当前在应用程序中的体验相关的临时数据。例如,用户正在查看的当前股票、用户正在电子书中阅读的当前页面或一长串项目中的滚动位置。用户数据是持久的,并且无论如何都必须始终可供用户访问。例如,用户正在输入的正在进行的文档、在应用程序中拍摄的照片或用户在游戏中的进度。

鉴于上述情况,我将尝试回答您的问题:

如何保存并恢复一个简单的文本框以从终止状态恢复?

当最终用户在文本框中输入内容时,应用程序会将后台内容保存到数据存储中。借用文字处理软件的工作原理,您可以自动保存文本框“文档”。我认为文本框内容就是上面的博客文章所描述的“用户数据”。由于保存是在暂停之外完成的,因此无需担心时间窗口。

当您的应用程序从终止状态恢复时,它会检查数据存储并将所有数据加载到文本框中。

一旦满足了最低要求,接下来我们可能需要额外的内容,例如光标和窗口位置。

我会将这些项目视为“会话数据”,并在暂停期间保存它们。毕竟,在应用程序处于活动状态时无需跟踪此信息。用户并不关心10分钟前开始打字时光标在哪里——他只关心暂停时的光标位置。

那些困难的事情怎么样,比如撤消历史记录?

我认为撤消历史记录是“用户数据”,并会在发生时(暂停之外)保存它。换句话说,当用户输入内容时,您的应用程序应该保存撤消所需的信息。

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

UWP/WinRT:如何保存然后恢复简单的文本框以从终止状态恢复? 的相关文章

  • 如何复用UI元素的组合?

    在我的 UWP xaml 文件中 我需要在下面的 ScrollViewer 代码中重用 StackPanel 该怎么做
  • Windows 10 ScrollIntoView() 不会滚动到列表视图中间的项目

    我有一个包含 20 个项目的列表视图 我想以编程方式滚动列表视图 ListView ScrollIntoView ListView Items 0 将滚动列表视图到第一项 ListView ScrollIntoView ListView I
  • 慢速 WPF 文本框

    我正在开发一个简单的串行数据查看器 它将用于观察传输到计算机串行端口之一的数据 我使用 C 和 WPF 编写了一个测试应用程序 它只是将最近读取的行放入文本块中 但是 它会跳过所有其他行 我的理论是 在 WPF 渲染窗口之前 新数据会被放入
  • 键盘加速器在 UWP 应用中停止工作

    我正在尝试将键盘加速器添加到 UWP 应用程序中的 CommandBar 菜单项 当应用程序启动时 这工作正常 但在我第一次打开溢出菜单后 加速器停止工作 这似乎不会发生在主要命令 菜单之外 上 只有溢出菜单内的辅助命令才会发生 此外 单击
  • 如何在 C# WinRT/winmd 中调整图像大小?

    我有一个简单的问题 但到目前为止我还没有找到答案 如何在 C WinRT WinMD 项目中调整 jpeg 图像的大小并将其另存为新的 jpeg 我正在开发 Windows 8 Metro 应用程序 用于从某些网站下载每日图像并将其显示在动
  • 获取总体 CPU 百分比使用率的可能性有哪些

    我有以下问题 在UWP中 我们如何获取总体CPU使用率 RAM使用率 可用RAM 正在运行的进程等 UWP 中的任务管理器需要它 您好 经过一番查看后 您似乎无法获得设备 CPU RAM 和可用 RAM 或正在运行的进程 您可以获得 CPU
  • 如何在 Metro Windows 8 中查找应用栏的图标? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何在 Metro Windows 8 中查找应用栏的图标 我如何添加自定义图标 默认的应用程序栏样式使用 Segoe UI Symbol 字体作为其
  • 切换 PC 时,InkCanvas 笔画未以正确的边界渲染

    我有一个 UWP 应用程序 使用带有加载和保存墨迹按钮的 UWP InkCanvas 我在一台笔记本电脑上使用该应用程序进行了绘图 将墨迹保存为 gif 嵌入 isf 并将 gif 文件发送到另一台屏幕较小的笔记本电脑上进行尝试 当使用同一
  • Windows 10 Mobile (10.0.14393) 地理围栏后台任务 (LocationTrigger)

    自从10 0 14393 周年纪念更新 LocationTrigger似乎不起作用 我有 Windows Phone 8 1 应用程序 也适用于 UWP 应用程序 输出到的便携式库Windows Runtime Component图书馆 w
  • 使用 BitmapEncoder 生成时如何使 GIF 循环重复

    我能够使用 BitmapEncoder C WinRT 创建动画 gif 但是 我一直无法弄清楚如何让GIF循环回来并从头开始 没有尝试太多 因为我不确定要尝试什么 搜索了更多要在 GIF 上设置的属性 但找不到任何相关内容 好吧 终于能弄
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • Windows 8 Metro 应用程序(网格应用程序)过渡时出现黑色闪烁

    我正在基于网格应用程序模板构建 Windows 8 Metro 应用程序 一切都很顺利 直到我尝试更改应用程序的主题和背景 我将图像背景应用于所有 3 个 XAML 页面的网格 另外 我在应用程序包清单中将主题更改为 Light 但它没有执
  • Win 10 应用程序:删除 Toast 通知

    我显示 toast 通知 然后它会显示在通知中心上 然后我想以编程方式从通知中心删除该通知 我怎样才能做到这一点 在显示通知和我需要删除它之间 该应用程序可能会关闭并重新启动 您可以使用以下方法之一以编程方式从操作中心删除通知 Toast通
  • 将文本字段限制为仅包含数字的最佳方法?

    I m using the following Javascript to restrict a text field on my website to only accept numerical input and no other le
  • 滚动查看器无法在网格上工作

    您好 我正在 Windows 10 中学习 UWP 我需要滚动网格 他们有两段代码很相似 我的本意是在grid2中滚动 第一段代码
  • 在 Win32 C# WPF 应用程序中使用 UWP C++ dll

    我正在尝试使用 Microsoft 在 Win32 C WPF 应用程序内的 UWP 示例之一中提供的 SimpleCommunication C DLL https github com Microsoft Windows univers
  • Windows 8 的 Grid.IsSharedSizeScope 等效项

    是否有任何类型的与 WPF 等效的简单 非自定义编码 Grid IsSharedSizeScope在 Windows 8 RT XAML 中 I have ListViewItem分为 3 个水平部分 这 3 列需要与所有边界对齐 每个列的
  • WinRT 不支持 Assembly.GetCallingAssembly,但适用于可移植类库?

    我需要获取有关调用我的组件的程序集的一些元数据 因此 使用Assembly GetCallingAssembly 似乎是天作之合 但是 我发现它在除 Windows 应用商店之外的任何地方都适用 支持的地方 手机7 0 http msdn
  • 快速将文本附加到文本框

    我有一个BackgroundWorker正在发布消息的线程 使用BeginInvoke在 GUI 中的文本框中 方法 write debug text 在文本框中显示文本使用AppendText并将文本写入Console 外观上是这样的Ba
  • WinRT 中的数据触发器?

    我能够找到事件触发 http msdn microsoft com en us library windows apps windows ui xaml eventtrigger 28v VS 85 29 aspx然而 在 WinRT 参考

随机推荐