首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WPF和MVVM:在重新加载时保存ScrollViewer位置和设置

WPF(Windows Presentation Foundation)是微软推出的一种用于创建Windows桌面应用程序的技术框架。它提供了丰富的图形、多媒体和用户界面功能,使开发人员能够创建具有吸引力和交互性的应用程序。

MVVM(Model-View-ViewModel)是一种软件架构模式,用于将用户界面(View)与业务逻辑(ViewModel)分离,并通过数据绑定实现二者之间的通信。MVVM的核心思想是将应用程序的状态和行为从视图中抽象出来,使得开发人员可以更好地管理和维护代码。

在重新加载时保存ScrollViewer位置和设置,可以通过以下步骤实现:

  1. 在ViewModel中添加用于保存和恢复ScrollViewer位置的属性。例如,可以添加两个属性:ScrollViewerVerticalOffsetScrollViewerHorizontalOffset
  2. 在View中,使用数据绑定将ScrollViewer的VerticalOffsetHorizontalOffset属性绑定到ViewModel中对应的属性。这样,当ScrollViewer的位置发生变化时,ViewModel中的属性也会相应更新。
  3. 在View的代码-behind中,订阅ScrollViewer的ScrollChanged事件。当ScrollViewer的位置发生变化时,触发该事件的处理程序。
  4. 在ScrollChanged事件处理程序中,将ScrollViewer的当前位置保存到ViewModel的对应属性中。
  5. 当重新加载页面时,从ViewModel中读取保存的ScrollViewer位置,并将其设置到ScrollViewer的VerticalOffsetHorizontalOffset属性中,以恢复之前的位置。

这样,当页面重新加载时,ScrollViewer的位置和设置就会被保存和恢复。

在腾讯云的产品中,与WPF和MVVM相关的推荐产品是云桌面(Cloud Desktop)。云桌面是一种基于云计算的虚拟桌面解决方案,可以将用户的桌面环境和应用程序部署在云端,用户可以通过网络访问和使用。云桌面可以提供高度可定制的用户界面,并支持WPF应用程序的运行。您可以通过腾讯云的云桌面产品了解更多信息:腾讯云桌面产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF MVVM 弹框之等待框

WPF MVVM 弹框之等待框 目录 一、效果 二、弹框主体改造 三、等待动画用户控件 四、弹窗 ViewModel 帮助类的改造 五、使用方法代码地址 独立观察员 2020年10月13日 之前写过一篇...《WPF MVVM 模式下的弹窗》,里面实现了确认框消息框,经过一段时间的演化,目前又新增了可显示自定义内容的弹框、可进行信息录入的弹框、以及本文将要介绍的加载等待框。...(此节参考朝夕教育 Jovan 老师 B 站发布的 WPF 教学视频的“动画实战”一节) 将一个 Grid 分为四列,每列中放置一个不同颜色的 Border (以 Grid 包裹)并设置 LayoutTransform...然后循环中按照命名规则,依次先使用 FindName 方法找到 ScaleTransform 元素对象,并对其设置 X Y 方向上的动画,等待 300 毫秒再设置下一个,总共四个。...四、弹窗 ViewModel 帮助类的改造 弹窗 ViewModel 中添加了一个标识是否是等待框的属性 IsWaitDialog,倒计时计时器里面,当是等待框改为正计时,自然也就不会触发关闭操作

2.5K20
  • XAML中的响应式布局技术

    针对特定屏幕宽度优化应用 UI ,我们将此称为创建响应式设计。WPF设计之初响应式设计的概念并不流行,那时候大部分网页设计师都按着宽度960像素的标准设计。...而且网页不同,WPF窗体默认没有提供ScrollViewer,所以千万不能忘记。桌面客户端合理使用以上技术可以避免客户投诉。但UWP主打跨平台,它需要更先进(或者说,更激进)的技术。 2....响应式设计技术 微软的官方文档介绍了UWP中响应式设计常用的6个技术,包括重新定位、调整大小、重新排列、显示/隐藏、替换重新构建,具体可见以下网站: ?... Auto 模式下,导航视图会进行自适应,在窗口狭窄为 LeftMinimal,接下来为 LeftCompact,随后在窗口变宽为 Left。 ?...--some xmal--> 这种时候MVVM的优势就体现出来了,因为VIEWVIEWMODEL解耦了,VIEW随便换,而且整个UI显示隐藏说不定比多个小模块独自改变性能更好

    2.3K10

    dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#、WPF、UWP、dotnet core 、git VisualStudio 一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到放弃的...不能用于文件名的字符 C# 判断两条直线距离 C# 判断系统版本 C# 动态加载卸载 DLL C# 复制列表 C# 如何写 DEBUG 输出 C# 如何在项目引用x86 x64的非托管代码 C# 已知点向量...uwp 获取按钮鼠标左键按下 win10 uwp 获取文件夹出错 win10 uwp 获得元素绝对坐标 win10 uwp 获得缩略图 win10 uwp 萤火虫效果 win10 uwp 让焦点在点击页面空白处回到...uwp-入门 win10-uwp-兴趣线 win10-uwp-切换主题 win10-uwp-列表模板选择器 win10-uwp-初始屏幕 win10-uwp-判断本地ip win10-uwp-右击浮出窗点击位置...主窗口不在最前 WPF 设置纯软件渲染 WPF 设置输入只能英文 WPF 调试 获得追踪输出 WPF 资源冻结 WPF 高性能笔 WPF 鼠标移动到列表上 显示列表图标 wpf-DoEvents WPF

    10.4K20

    请来围观:WPF开发的微信客户端!!!

    一、登录模块 1、登录部分分为二维码获取用户头像两个页面(因为是给予WEB的,所以没有客户端的登录按钮,只能通过扫码来登录) 程序启动以后,先通过请求获取到二维码,然后,启动一个新的线程,不断的循环检索登录状态...当处于二维码状态划过,则出现动画,头像状态下则没有动画,是设置了Image的Visibility属性来控制的,滑动效果可以看我的另一篇博客微信 二维码鼠标滑动 图像显隐效果[4]。...通讯录部分,聊天列表差不多,不过,由于需要进行分组,也就是A、B……这种组合,所以用的Object类型,点选过程中,通过is来进行判别是不是WeChatUser,如果是,则进行转换,来进一步处理。...三、总结 做WPF微信DEMO,用到了转换器,转换颜色,转换显隐;重写了控件的样式,例如Button、RadioButton、ListBox;然后MVVM模式下,Bind的用法,感觉这个DEOM对于初学者来说应该会有很大的帮助...最大化问题,是我一直还没有想到好的解决办法,最大化的情况下会占据整个屏幕,而不把状态栏空出来,网上的办法都是重新设置WidthHeight,但是这样的话,就要记录原来的大小位置,一直没有找到可以重写

    1.8K30

    .net Framework 源代码 · ScrollViewer 使用原理其他源代码分析

    ScrollViewer 存在两个滚动方式,物理滚动 逻辑滚动,如果使用 物理滚动 那么滚动就是ScrollViewer做的,如何使用逻辑滚动,那么滚动就是控件自己做的。...如果这时设置了PanningMode,就会发现拖动让窗口抖动,这时需要在窗口重写 OnManipulationBoundaryFeedback ,请看下面代码。...可以看到布局设置反过来的 HorizontalOffset 作为元素的 x 移动,通过这样就可以让元素移动 但是元素如果移动 ScrollViewer 外面,如何裁剪?...另外这个方法是布局做的,直接计算,如果修改 Translate 还需要在布局重新计算,所以这个方法的性能会比较高。 触摸输入 那么 ScrollViewer 是如何在触摸的时候获得输入?...通过判断当前的移动是否有移动然后乘以倍数,然后通过设置 HorizontalOffset 这几个属性的值,重新布局就可以。

    1.8K10

    dotnet Framework 源代码 · ScrollViewer

    ScrollViewer 存在两个滚动方式,物理滚动 逻辑滚动,如果使用 物理滚动 那么滚动就是ScrollViewer做的,如何使用逻辑滚动,那么滚动就是控件自己做的。...如果这时设置了PanningMode,就会发现拖动让窗口抖动,这时需要在窗口重写 OnManipulationBoundaryFeedback ,请看下面代码。...可以看到布局设置反过来的 HorizontalOffset 作为元素的 x 移动,通过这样就可以让元素移动 但是元素如果移动 ScrollViewer 外面,如何裁剪?...另外这个方法是布局做的,直接计算,如果修改 Translate 还需要在布局重新计算,所以这个方法的性能会比较高。 触摸输入 那么 ScrollViewer 是如何在触摸的时候获得输入?...通过判断当前的移动是否有移动然后乘以倍数,然后通过设置 HorizontalOffset 这几个属性的值,重新布局就可以。

    73520

    win10 uwp 如何判断一个控件滚动条的里面是用户可见

    昨天星期八再娶你 大佬问我如何判断滚动条内可以看到某个元素,他需要在滚动条里面放一个视频播放器,在用户看不到这个播放器的时候自动停下这个播放器 UWP 的判断会比 WPF 中复杂一些,我写过WPF...事件,但是这个事件 WPF 的触发不相同的在于,如果我有外层的控件修改了滚动条的大小,不会触发这个事件。...LayoutUpdated可以控件第一次加载的时候触发,可以在用户滚动的时候触发 LayoutUpdated 通过判断控件的左上角坐标控件的大小可以判断用户是否可以看到这个控件 UWP...WPF 的 TranslatePoint 方法相同 判断滚动条可见大小不能从方法的参数拿到,需要直接拿滚动条控件,这样会存在一个坑在于时机的问题, WPF 不相同,此时的事件很难做到精确拿到滚动条的当前的大小移动距离...ScrollViewer.ViewChanged 事件同时使用,这样就可以拿到用户滚动修改大小 uwp - XAML ScrollViewer’s child bring into view event

    93020

    WPF --- 触摸屏下的两个问题

    引言 本篇文章分享一下之前遇到的WPF应用在触摸屏下使用时的两个问题。...期间遇到了两个问题: WPF触摸屏下,如果有滚动条(ScrollViewer)的情况下,默认包含触底反馈的功能,就是触摸屏滑动到底或从底滑到顶,界面都会出现抖动的情况。...触摸屏下,当触点处于 DataGrid 中,无法滚动界面。...的 UI 元素绑定它的反馈事件,然后注册方法中设置 e.Handled = true; ,这样中断了事件继续冒泡或隧道传播,比如这样 // Xaml中,在对应的 UIElement 上绑定ManipulationBoundaryFeedback...我处理这个问题的时候,是先处理的鼠标滑轮无法滚动,处理方案就是根据鼠标的偏移量,手动设置 ScrollViewer位置,如下: private void DataGrid_MouseWheel(object

    21610

    【愚公系列】2023年11月 WPF控件专题 2023秋招WPF高频面试题

    详细地说,可以使用一种样式对一组属性的设置进行分组,以便重新使用它来标准化已有控件。 样式可以控件上显式设置,也可以应用于所有特定类型。...请注意,仍有一些异常会导致应用程序崩溃,例如在尝试保存到数据库出现堆栈溢出、内存耗尽或网络连接丢失等情况。 21.WPF中的x:NameName属性之间有什么区别?它们不是同一件事。...当您为元素提供 x:Name xaml 属性,“指定的 x:Name 将成为处理 xaml 底层代码中创建的字段的名称,并且该字段保存对对象的引用。”...当设置依赖属性的值,它不会存储在对象的字段中,而是存储基类 DependencyObject 提供的键值字典中。 条目的键是属性的名称,值是您要设置的值。...当设置依赖属性的值,它不会存储在对象的字段中,而是存储基类 DependencyObject 提供的键值字典中。 条目的键是属性的名称,值是您要设置的值。

    49122

    WPF 搬迁到 UOS 下的 UNO 的笔记

    本文记录我将一个小 WPF 应用搬迁到 UNO 框架,用于支持统信 UOS 系统开发经验 开始之前先说一下我的需求,我现在有一个小的 WPF 应用。...GTK 做底层 文本 UOS 闪烁黑屏问题 这是 OpenGL 的问题,修复方法请看 dotnet UOS 统信系统上运行 UNO 程序输入时闪烁黑屏问题 中文文本乱码 中文文本乱码是因为中文字体没有正确加载...核心就是通过爬视觉树找到 ScrollViewer 对象,通过 ScrollViewer 控制滚动 几何图形 StreamGeometry 资源 WPF 里面,经常有图标使用的是 Path 几何路径...默认的 HorizontalContentAlignment VerticalContentAlignment 是左上角,需要设置为 Stretch 才 WPF 相同 <ContentControl...WPF 相同,但也有少部分布局属性 WPF 不相同,比如大量控件的 HorizontalAlignment VerticalAlignment 都是左上角,需要设置为 Stretch 才 WPF

    74110

    WPF --- 非Button自定义控件实现点击功能

    一个 Image Button,然后点击按钮 后台代码中给 ViewModel 的 FilePath赋值。...点击功能方案实现 因为有 「MVVM」 的存在,所以 WPF 中 Button 点击功能有两种方案, 第一种是直接注册点击事件,比如 Click="OpenFolderBrowserControl_Click...测试 准备测试窗体 ViewModel,这里为了不引入依赖包,也算是复习一下 「MVVM」 的实现,就手动实现 ICommand INotifyPropertyChanged。...The value of FilePath is C:\Users\Administrator\Music 结论 从测试结果中可以看出, UI 注册的 「Click」 「Command」 均触发...上述方案既保证了 UI 的优雅也保证了 MVVM 架构的前后分离特性。 如果大家有更好更优雅的方案,欢迎留言讨论。

    31810

    WPF 表格控件 ReoGrid 的简单使用

    WPF 表格控件 ReoGrid 的简单使用 目录 一、概述 二、安装 三、添加控件 四、加载 Excel 五、属性设置 六、支持触摸滚动 七、其它操作 1、显示隐藏列 2、显示特定字体 八、资源链接...本文演示 WPF 中的使用,用的是直接加载 Excel 的方式,另外解决了触摸滑动的问题。 二、安装 新建好 WPF 项目后,我们使用 NuGet 安装 ReoGrid。...,可以直接进行编辑: 四、加载 Excel 我们先在项目中添加一个 Excel,生成操作设置为 Resource(资源): 然后使用如下方法载入 Excel 内容到控件中(构造函数中调用该方法):...以上方法依次进行了如下操作:去除了选择的样式,冻结了前两行第一列(固定表头),去除了行列的序号,设置只读,设置需要显示的行列范围。...这个应该是 WPFScrollViewer 本身的问题,之前碰到过,网上有人提供过一个方法来解决(通过附加属性)。

    3.6K10

    WPF面试题-来自ChatGPT的解答

    静态资源的值应用程序运行期间保持不变,除非手动修改或重新加载资源。 动态资源:动态资源是代码中动态创建和添加的资源,其值可以在运行时根据应用程序的状态或用户的操作进行修改。...性能:如果你的数据集合很大,ListView可能更适合,因为它支持虚拟化,只会在需要加载显示可见的项,而ListBox会一次性加载所有项。 数据绑定是将数据源与控件关联的过程。...响应式布局:WPF提供了强大的布局系统,可以自动调整重新排列界面元素,以适应不同的窗口大小分辨率。这使得不同的设备上创建自适应的用户界面更加容易。...WPF框架会根据可视化树来确定UI元素的位置大小,并将它们渲染到屏幕上。 逻辑树是另一个层次结构,它描述了UI元素之间的逻辑关系。逻辑树用于处理UI元素的事件命令。...,当用户ComboBox中选择一个项,SelectedItem属性将被设置为选定项的对象,SelectedValue属性将被设置为选定项的Id属性的值。

    40430

    【愚公系列】2023年09月 WPF控件专题 ListBox控件详解

    WPF控件可以分为两类:原生控件自定义控件。 原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。...这些控件都是WPF中常见的标准用户界面元素。 自定义控件则允许开发人员使用XAMLC#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能自定义化选项,以及更好的用户体验。...ScrollViewer.HorizontalScrollBarVisibilityScrollViewer.VerticalScrollBarVisibility:用于设置ListBox中滚动条的可见性...使用ListBox控件的基本步骤如下: XAML文件中,使用ListBox标签创建ListBox控件。 给ListBox控件设置ItemsSource属性,指定数据源。...IsSynchronizedWithCurrentItem:指示ListBox是否跟踪其所包含的集合中当前项的位置

    73300

    WPF 已知问题 开启 IsManipulationEnabled 之后触摸长按 RepeatButton 不会触发连续的 Click 事件

    本文记录 WPF 的一个已知问题, RepeatButton 上开启 IsManipulationEnabled 漫游支持之后,将会导致触摸长按到 RepeatButton 之上,不会收到源源不断的...Click 事件 这是有个伙伴 WPF 官方仓库报告的问题,详细请看 https://github.com/dotnet/wpf/issues/8223 原始的问题是他发现放在 ListBox 里面的...RepeatButton 无法触摸长按的时候收到连续的 Click 事件,以为是放在 ListBox 下的 RepeatButton 存在奇怪的问题 实际上他的这个问题 ListBox 没有任何关系...都能复现 RepeatButton 触摸长按时无法收到源源不断的 Click 事件 ListBox 里面实际上隐藏了包含 IsManipulationEnabled 为 true 的 ScrollViewer...,预计很长时间都不会解决这个问题 本文以上代码放在github gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,命令行里面输入以下代码

    17010

    原生TabControl控件实现拖拽排序功能

    UI交互中,拖拽操作是一种非常简单友好的交互。尤其是ListBox,TabControl,ListView这类列表控件中更为常见。通常要实现拖拽排序功能的做法是自定义控件。...本文将分享一种原生控件上设置附加属性的方式实现拖拽排序功能。 该方法的使用非常简单,仅需增加一个附加属性就行。...另外,WPF的一大特点是支持数据驱动,即由数据模型来推动UI的呈现。...因此,可以通过通过拖拽事件处理拖拽的源位置以及目标位置,并获取到对应位置渲染的数据,然后操作数据集中数据的位置,从而实现数据UI界面上的顺序更新。...static void SetIsItemsDragDropEnabled(Selector scrollViewer, bool value) { scrollViewer.SetValue

    41420
    领券