官方对List view和Grid view的描述是:
The feature-rich ListView and GridView controls work out of box. They require no customization, but they can be customized easily. Each has its own built-in UI and UX and is designed to display nearly any type of collection as is.
翻译过来也就说,这两个容器功能非常丰富,他们不需要定制,但自定义内容也很简单。每一个都有自己内置的UI和UX,并且能被用以表现所有类型集合。
UI的排布是X、Y轴的布局,那么纵向列表和网格确实能表达几乎所有集合这话并非不妥。
另外,列表和网格还具有“相同样式不同数据的重复子件”的特殊重复性,这意味着,其往往是和数据强绑定的。
设计者只需要关注其子件样式即可。
ListView和GridView使用属性itemsSource来绑定数据,或者通过在标签内添加item来添加数据。
但是二者是相互冲突的。
列表和网格的优先级是[itemsSource > items],这意味着当绑定数据后,手动添加在XAML的item将会被忽视。
如何绑定数据:
<ListView itemsSource="{x:Bind ViewModel.Datas} />
默认的,ListView使用ItemsStackPanel作为布局容器;GridView则默认使用ItemsWrapGrid。
相信两个名字并不让人陌生。
自然,他们的布局容器是可以自定义的。
但是自定义之前,官方有提到一点注意事项:
If you change ItemsPanel, do not disable virtualization. Both ItemsStackPanel and ItemsWrapGrid support virtualization, so these classes are safe to use. If you use any other panel, you might disable virtualization and slow the performance of the list view. For more info, see the list view articles under Performance.
翻译过来就是,当你改变ItemsPanel(也就是布局容器,或者子件面板)的时候,不要关闭虚拟化。无论是栈面板还是行面板,都是支持虚拟化的,都是可以安全的使用的。而当你使用其他的面板的时候,你可以关闭虚拟化来减少这些视图的性能损耗。
再翻译一下就是:这两个容器是安全的!你没有必要特地关闭虚拟化!但是你也可以在任何情况下关闭虚拟化来达到降低性能损耗的目的!
以ListView为例。
1)改变StackPanel的布局方向为水平
<ListView Height="80">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
2)滚动条设置
可以通过修改ListView的ScrollViewer属性来自定义滚动条的状态。
- ScrollViewer.HorizontalScrollMode:水平滚动条启动或关闭(Disable, Enable)
- ScrollViewer.HorizontalScrollBarVisibility:水平滚动条的可见(Auto,Disable,Hidden,Visible)
- ScrollViewer.VerticalScrollMode:垂直的
- ScrollViewer.VerticalScrollBarVisibility:垂直的
<ListView Height="60"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollMode="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Hidden">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<x:String>Strawberry</x:String>
</ListView>
在设置ListView为水平布局的时候,可以通过限定listview的宽度来使得滚动功能可用。
ListView具有两个属性:SelectionMode、IsItemClickEnable
开发者通过修改SelectionMode属性来改变List的选中模式。
None:无选中样式,列表为只读状态。
Single:只能选中一个。Ctrl+点击可以取消选中;选中事件触发时,能得到一个SelectedItem,且SelectedIndex有效。如果没有选中,则前者是Null,后者是-1。此外,如果手动设置一个不在数据中的item,那么其会被忽视,SelectedItem仍然为null。而如果设置一个SeletedIndex超过了数据的最大索引,那么会抛出ArgumentException异常。
Multiple:多选;Shift+点击可以范围多选;使用SelectedItems获取选中项。他和SeletedIndex、SeletedItem是同步的。另外,SeletedItem和eSeletedIndex是第一个选中的项。
Extended:拓展的;基本同Multiple。
当SelectionMode不为None且IsItemClickEnable不为False,那么“选中”和“点击”都会触发事件。
触发顺序是先触发点击事件,再触发选中事件。
如果点击事件需要另一个页面的加载后才能捕捉到,那么点击事件不会触发,子件不会被选中。
如何添加选中事件:
<ListView x:Name="listView1" SelectionMode="Multiple"
SelectionChanged="ListView1_SelectionChanged">
</ListView>
然后在cs中定义事件方法void ListView1_SelectionChanged(object sender, SelectionChangedEventArgs e);
如何添加点击事件:
<ListView SelectionMode="None"
IsItemClickEnabled="True"
ItemClick="ListView1_ItemClick">
</ListView>
然后在cs中定义事件方法:
void ListView1_ItemClick(object sender, ItemClickEventArgs e)
在代码中,可以通过API对ListView进行操作:
var listview = new ListView();
...
// 全选
listview.SelectAll();
// 范围选择
listview.SelectRange(new ItemIndexRange(0, (uint)listview.Items.Count));
// 范围取消选择
listview.DeselectRange(new ItemIndexRange(0, (uint)listview.Items.Count));
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
如何学习ruby的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG
文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk=Var(yt)Cov(yt,yt−k)其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记