WPF/Sliverlight ScrollViewer与Panel(2)
这篇主要讲讨论ScrollViewer的一部分
当一个元素高度过高时
1.单元素
左侧Button高度300,右侧是600,右侧的Button外部有一个ScrollViewer
<Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Button Content="Test1"></Button><ScrollViewer Grid.Column="1"><Button Content="Test1" Height="600"></Button></ScrollViewer></Grid>
2.集合容器即StackPanel,上篇已经演示过
不管往ScrollViewer放什么元素,只要高度过高,都会出现ScrollBar供拖拉,这种机制即是我们要所要了解的.
我们来看下生成的VisualTree
逻辑树与视觉树
从逻辑树上来看Button的父元素是ScrollViewer,而视觉树的父元素则是ScrollContentPresenter.
通过ScrollBar移位单容器和列表的
我们新建一个ListBox控件,现在点ScrollBar最下面的箭头,会发现每点下,元素会向下移动一位
如果是单个元素的话,比如Button,每次位移的高度与ListBox则会不同.
以此我们可以看到WPF内部实现了这些逻辑。如何实现ScrollBar拖拉将是我们关注的重点
IScrollInfo
这个接口实现了所有一个用ScrollBar操作一个元素的所有方法
实现IScrollInfo接口的类
- ScrollContentPresenter 其是提供操作单元素的一个实现,放在ScrollViewer的内部模板内,所以很幸运,所以放在ScrollViewer内部的控件都将得到默认的支持
- StackPanel 你肯定没想到StackPanel 也实现了这个接口,那么为什么当高度超出时,并没有出现ScrollBar呢?
IScrollInfo必须与ScrollViewer结合使用,ScrollViewer内部会判断其内部元素有无实现IScrollInfo的元素,如果有则会去调用其方法.而脱离了ScrollViewer,其无法发挥作用
视觉树越少越好
用最少的视觉树满足当前UI的显示,这是最优化目标
显然在ListBox显示20个元素,而在视觉树上有100个元素,则造成80个元素的浪费存储,所以WPF提供了一个VirtualizingStackPanel,即使绑定了10000个元素,而在视觉树中则存有少数的元素,这样便不会拖垮系统的整体性能了.
转载于:https://www.cnblogs.com/Clingingboy/archive/2010/10/19/1855509.html
WPF/Sliverlight ScrollViewer与Panel(2)相关推荐
- WPF基础入门3 - Panel和 Canvas基本使用
一 Panel WPF的布局控件都从System.Windows.Controls.Panel基类继承: Pane类的公共属性很多:例如, Cursor 获取或设置在鼠标指针位于此元素上时显示的光标. ...
- WPF实现ScrollViewer平滑滚动效果
WPF实现滚动条只要在控件外围加上ScrollViewer即可,但是滚动的时候没有动画效果,比较生硬,在滚动的时候添加过渡动画实现平滑滚动能给我们的软件增色不少. 接下来,在上一篇博客(WPF使用Fl ...
- WPF 实现ScrollViewer的垂直偏移滚动跳转
问题:考虑屏幕大小,一般都是会在表单问卷的页面使用ScrollViewer.问卷中问题漏填漏选时,在提交时校验不过,需要滚动跳转至漏填漏选项. 页面如下: 每个选项使用StackPanel,并对复选框 ...
- 微软XAML Studio - WPF, Sliverlight, Xamarin, UWP等技术开发者的福音
最近又在继续倒腾 WPF 的项目,继续使用 Caliburn.Micro 和 Xceed 来堆代码.每次调试xaml上的binding,都有种要疯的赶脚. 今天路过 https://channel9. ...
- 让 ScrollViewer 的滚动带上动画
让 ScrollViewer 的滚动带上动画 原文:让 ScrollViewer 的滚动带上动画 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.欢迎转载. ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(3月1日-3月5日)
休假一个月,没有更新Silverlight/WPF/Windows Phone学习导读.从本周开始继续分享每周最新的Silverlight/WPF/Windows Phone开发学习导读. 本周Sil ...
- WPF 表格控件 ReoGrid 的简单使用
WPF 表格控件 ReoGrid 的简单使用 目录 一.概述 二.安装 三.添加控件 四.加载 Excel 五.属性设置 六.支持触摸滚动 七.其它操作 1.显示和隐藏列 2.显示特定字体 八.资源链 ...
- 解决VS2019中.net core WPF 暂时无法使用 Designer 的临时方法
目录 解决 VS2019 中.net core WPF 暂时无法使用 Designer 的临时方法 安装 vs 2019 professional/enterprise版本 在vs的设置里,勾选.NE ...
- 分享Silverlight/WPF/Windows Phone一周学习导读
分享Silverlight/WPF/Windows Phone一周学习导读 本周Silverlight学习资源更新: SilverLight日历控件如何获得多语言的支持 银光中国网 Silverlig ...
最新文章
- 利用OpenCV实现基于深度学习的超分辨率处理
- Java学习笔记(六)--字符串String类
- shiro整合ehcache
- Linux shell程序一
- Jenkins安装入门
- Java命令行界面(第5部分):JewelCli
- Azure IoT带来更高效的新能源生产和会看人脸色的无人超市
- 【渝粤教育】电大中专成本会计作业 题库
- 俄罗斯方块java代码_java的俄罗斯方块代码
- 如何下载官方windows10的ios镜像文件
- Android基于串口通讯笔记(USB,485协议,232协议)
- Maya---捕捉命令
- visual studio fatal error C1083: 无法打开源文件
- APP性能测试——内存测试
- Skype、MSN/Live Messenger、Lync全面整合
- 从WinMain函数看Windows程序内部运行机制
- 微软输入法自动导入小鹤双拼
- linux指令查询ip地址
- sparse_categorical_crossentropy的使用
- osChina.net工具
热门文章
- 如何构建数据指标体系?
- 盘点抖音及今日头条的优化推广方法有哪些?
- 安卓电子市场_关于安卓手机发展史你知道多少?原来最早安卓居然不是手机系统!...
- tomcat 7 mysql,Tomcat 七设置mysql数据源
- python解决单调栈问题
- pycharm的项目文件中包括什么_一个完整的项目管理流程包括什么?
- ubuntu ifconfig_VirtualBox中ubuntu的LAMP项目(温度采集)
- Spark in action on Kubernetes - 存储篇(一)
- 深度学习(deep learning)优化调参细节(trick)
- VINS-Mono代码分析与总结(完整版)