当前位置: 首页 > news >正文

浅谈WPF之UniformGrid和ItemsControl

在日常开发中,有些布局非常具有规律性,比如相同的列宽,行高,均匀的排列等,为了简化开发,WPF提供了UniformGrid布局和ItemsControl容器,本文以一个简单的小例子,简述,如何在WPF开发中应用UniformGrid和ItemsControl实现均匀的布局,仅供学习分享使用,如有不足之处,还请指正。

什么是UniformGrid?

在WPF开发中,提供了一种Grid网格布局,此布局应用灵活,形式多样,在使用之前,需要定义行,列,设置高度,宽度等内容,使用相对复杂。为了简化布局,针对具有等宽,等高的布局,提供了一种更加简化的布局容器UniformGrid。

UniformGrid【统一布局】,提供一种在网格(网格中的所有单元格都具有相同的大小)中排列内容的方法。

UniformGrid常用属性

UniformGird中同一行中,列等宽,同一列中,行等高。常用属性为:

  • Margin:获取或设置元素的外边距。
  • Name:元素的标识名称;
  • Opacity:透明度
  • Width/Height:宽度和高度;
  • Visibility:该元素可见性;
  • Rows:获取或设置网格中的行数;
  • Columns:获取或设置网格中的列数;
  • FirstColumn    获取或设置网格第一行中前导空白单元格的数量,必须小于属性的值 Columns;

注意:UniformGrid相当于简化版的Gird,但并不是Grid的子类,而是和Grid同级,都继承于与Panel类。

UniformGrid示例

UniformGrid中如果不设置子元素的控件大小,会根据容器的大小和行列数自动填充。如下所示:

<UniformGrid Columns="4" Margin="5"><Button Content="按钮1" Margin="2"></Button><Button Content="按钮2" Margin="2"></Button><Button Content="按钮3" Margin="2"></Button><Button Content="按钮4" Margin="2"></Button><Button Content="按钮5" Margin="2"></Button><Button Content="按钮6" Margin="2"></Button>
</UniformGrid>

 

关于UniformGrid,有以下几点需要注意:

如果设置了Columns,没有设置Rows,则会根据元素个数和列数自动计算行数。

如果设置了Rows,没有设置Columns,则会根据元素个数和行数自动计算列数。

如果Rows,Columns都没有设置,则会根据元素个数自动匹配,建议至少设置一个,否则可能与预期的布局不符

如果没有设置容器中元素的大下,则自动填充;如果设置了容器中元素的大小,且小于容器为该元素分配的平均大小,则以元素为准,其他以空白填充;如果设置了元素大小,且元素的大小大于容器为该元素分配的平均大小,则多余部分会隐藏,只显示能够显示的那部分。

什么是ItemsControl?

ItemsControl条目控件,用于显示数据项集合,它允许按照自定义方式呈现任何类型的对象,可以在其中使用不同的布局和面板来展示数据。ItemsControl非常灵活,可以满足各种需求。

ItemsControl涉及知识点

ItemsControl的常用知识点如下:

  • ItemTemplate,是DataTemplate类型,可以通过ItemTemplate设置条目项的呈现方式。
  • ItemsPanel,是ItemsPanelTemplate类型,可以通过ItemsPanel设置容器中各个条目项的布局方式。
  • ItemsSource,可以通过绑定数据源为ItemsControl设置内容。
  • Items,条目列表,如果设置了ItemsSource,则此属性不生效

ItemsControl示例

以下示例以文本的形式,展示了每一个条目项,且默认元素以横向排列。如下所示:

<ItemsControl ItemsSource="{Binding Customers}"><ItemsControl.ItemTemplate><DataTemplate><TextBlock Text="{Binding Name}" /></DataTemplate></ItemsControl.ItemTemplate><ItemsControl.ItemsPanel><ItemsPanelTemplate><StackPanel /></ItemsPanelTemplate></ItemsControl.ItemsPanel>
</ItemsControl>

 

ItemsControl和UniformGrid结合

结合ItemsControl【数据绑定,条目项自定义设置】和UniformGrid【等高,等宽】各自的优点,创建一个图片列表。具体步骤如下:

  1. 自动识别文件夹中的图片,然后将数据源绑定到ItemsControl中进行呈现。
  2. ItemsControl中的条目项中展示图片缩略图和名称,且条目项中的图片等比缩放。
  3. 条目布局采用UniformGrid,且每行显示5张图。
  4. 图片较多时,要有滚动条,所以需要设置ScrollViewer。

在Xaml中,页面布局如下所示:

<ScrollViewer VerticalScrollBarVisibility="Auto"><ItemsControl ItemsSource="{Binding ImageItems}" Background="#eeeeee"><ItemsControl.ItemsPanel><ItemsPanelTemplate><UniformGrid Columns="5"></UniformGrid></ItemsPanelTemplate></ItemsControl.ItemsPanel><ItemsControl.ItemTemplate><DataTemplate><StackPanel Orientation="Vertical" Margin="3"><Image Source="{Binding ImagePath}" Stretch="Uniform"></Image><TextBlock Text="{Binding ImageName}" HorizontalAlignment="Center" VerticalAlignment="Bottom"></TextBlock></StackPanel></DataTemplate></ItemsControl.ItemTemplate></ItemsControl>
</ScrollViewer>

 

其中ItemsSource属性用于绑定数据源,在ViewModel层进行构造,如下所示:

public class MainWindowViewModel
{public ObservableCollection<ImageItem> ImageItems { get; set; }public MainWindowViewModel(){ImageItems = new ObservableCollection<ImageItem>();for(int i = 0; i < 8; i++){for(int j = 0; j < 5; j++){var imageName = $"{i+1}.{j+1}.jpg";var imagePath = Path.Combine(Environment.CurrentDirectory, "imgs", imageName);ImageItems.Add(new ImageItem(){ImageName = imageName,ImagePath = imagePath});}}}
}

 

运行示例如下所示:

 以上就是【浅谈WPF之UniformGrid和ItemsControl】的全部内容,关于更多详细内容,可参考官方文档。希望能够一起学习,共同进步。

相关文章:

浅谈WPF之UniformGrid和ItemsControl

在日常开发中&#xff0c;有些布局非常具有规律性&#xff0c;比如相同的列宽&#xff0c;行高&#xff0c;均匀的排列等&#xff0c;为了简化开发&#xff0c;WPF提供了UniformGrid布局和ItemsControl容器&#xff0c;本文以一个简单的小例子&#xff0c;简述&#xff0c;如何…...

SEO系列--robots.txt的用法

原文网址&#xff1a;SEO系列--robots.txt的用法-CSDN博客 简介 本文介绍网站的robots.txt文件的用法。 Robots是站点与搜索引擎爬虫沟通的重要渠道&#xff0c;站点通过robots文件声明本网站中不想被搜索引擎抓取的部分或者只让搜索引擎抓取指定内容。 搜索引擎使用spider…...

环形链表(快慢指针)

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环…...

vue day06

1、路由模块封装 2、声明式导航 实现导航高亮效果 直接通过这两个类名对相应标签设置样式 点击a链接进入my页面时&#xff0c;a链接 我的音乐高亮&#xff0c;同时my下的a、b页面中的 我的音乐也有router-link-active类&#xff0c;但没有精确匹配的类&#xff08;只有my页…...

ffmpeg 输入文件,输入出udp-ts 指定pid、Programid ts流参数

要使用FFmpeg将输入文件转换为UDP传输流&#xff08;TS&#xff09;并指定特定的PID、Program ID以及其他TS流参数&#xff0c;您可以使用以下命令&#xff1a; ffmpeg -i input_file -c:v libx264 -preset ultrafast -tune zerolatency -f mpegts -map 0:v:0 -map 0:a:0 -pid …...

操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构

目录 操作系统 windows macos Linux 服务器搭建网站 关于解释器的流程 curl -I命令 名词解释 dos bash/terminal&#xff0c;(终端) nginx/apache&#xff08;Linux平台下的&#xff09; iis&#xff08;Windows平台下的&#xff09; GUI(图形化管理接口&#xff…...

金蝶82新建员工信息维护菜单,并新建导入模板,导入时出现不能在此处导入模板

原因&#xff1a;82版本bug&#xff0c;校验了所有T_BS_SHRFileTemplate中 FDATANUMBER001的uipk 只要任意一个模板里面不包含当前列表的uipk就会抛出异常 解决办法&#xff1a; 将当前列表uipk加到其他FDATANUMBER001的模板中 例如: update T_BS_SHRFileTemplate set FU…...

套你npm镜像

套你npm镜像 大天才&#xff0c;给我错误镜像信息&#xff0c;然后npm install卡住&#xff01;&#xff01; gpt生成的淘宝镜像地址&#xff1a; https://registry.npm.taobao.org/安装情况&#xff1a;卡死如下… 正确镜像地址&#xff1a; # 更换npm config set registry…...

[网络安全]IIS---FTP服务器 、serverU详解

一 . FTP服务器(File Transfor Protocol) : 协议:文件传输协议 端口号:TCP: 20(数据) / 21(控制) 二 . FTP工作方式: 1.主动模式 : (FTP服务器21端口与FTP客户端产生的随机端口先建立连接 建立连接后,再使用FTP服务器21端口与FTP客户端创建的一个新的随机端口进行发送…...

校园自助洗浴设施运维服务认证的介绍

校园自助洗浴设施运维服务认证是一种针对校园自助洗浴设施运维服务质量的评估和认证体系。通过该认证&#xff0c;学校可以确保自助洗浴设施的安全、可靠、卫生和持续运行&#xff0c;为师生提供更好的洗浴体验。 自助洗浴设施运维服务通常包括的具体工作&#xff1a; 1.设备维…...

NetCore iText7 根据PDF模板 导出PDF文件

iText 7 是一个用于处理 PDF 文件的流行的开源库&#xff0c;它提供了丰富的功能&#xff0c;包括创建、编辑和处理 PDF 文档。它支持 .NET 平台&#xff0c;因此可以在 .NET Core 中使用该库来处理 PDF 文件。 使用 iText 7&#xff0c;您可以进行以下操作&#xff1a; 1. 创…...

Notion 开源替代品:兼容 Miro 绘图 | 开源日报 No.162

toeverything/AFFiNE Stars: 25.6k License: NOASSERTION AFFiNE 是下一代知识库&#xff0c;将规划、排序和创建集于一身。它是一个注重隐私、开源、可定制且即插即用的替代方案&#xff0c;可以与 Notion 和 Miro 相媲美。主要功能和优势包括&#xff1a; 超融合&#xff1…...

LangChain 81 LangGraph 从入门到精通三

LangChain系列文章 LangChain 60 深入理解LangChain 表达式语言23 multiple chains链透传参数 LangChain Expression Language (LCEL)LangChain 61 深入理解LangChain 表达式语言24 multiple chains链透传参数 LangChain Expression Language (LCEL)LangChain 62 深入理解Lang…...

Python学习从0到1 day13 Python数据容器.4.set集合、dict字典,映射

他往黑夜里去了&#xff0c;我陪他 ——24.2.4 一、set集合 1.为什么使用集合&#xff1f; 通过特性来分析&#xff1a; 列表可修改、支持重复元素且有序 元组、字符串不可修改、支持重复元素且有序 局限在于&#xff1a;它们都支持重复元素 当场景需要对内容进行去重处理&am…...

Java生成微信小程序二维码的方式有哪些?

大家好我是咕噜美乐蒂&#xff0c;很高兴又见面啦&#xff01;今天我们来谈一下如何使用Java生成微信小程序二维码&#xff0c;有哪些方式方法呢&#xff1f; 生成微信小程序二维码是开发微信小程序时的常见需求之一。在Java中&#xff0c;我们可以使用多种方式来生成微信小程…...

一箭11星,吉利未来出行星座第二个轨道面部署完成!

临近春节&#xff0c;国内卫星产业又传来好消息&#xff01; 2024年2月3日7时37分&#xff0c;11颗卫星通过长征二号丙运载火箭&#xff0c;在西昌卫星发射中心发射升空。火箭顺利将所有卫星送入预定轨道&#xff0c;所有卫星状态正常&#xff0c;发射任务获得圆满成功。 本次发…...

【持续学习系列(九)】《Continual Learning with Pre-Trained Models: A Survey》

一、论文信息 1 标题 Continual Learning with Pre-Trained Models: A Survey 2 作者 Da-Wei Zhou, Hai-Long Sun, Jingyi Ning, Han-Jia Ye, De-Chuan Zhan 3 研究机构 National Key Laboratory for Novel Software Technology, Nanjing University; School of Artifici…...

redis的AOF

redis 提供了两种持久化方式—— RDB(Redis DataBase) 和 AOF(Append Only File) &#xff0c;可以将 Redis 在内存中的数据库状态保存到磁盘里。 RDB快照并不是很可靠。如果服务器突然宕机了&#xff0c;最新的数据就会丢失。除了 RDB 持久化功能之外&#xff0c;Redis 还提供…...

TDengine 签约杭州云润,助力某大型水表企业时序数据处理

在智慧电表水表的数据采集和存储过程中&#xff0c;时序数据处理成为一个重要的问题。由于电表水表数据具有时间序列的特点&#xff0c;传统的数据库和数据处理方式往往难以满足大规模数据的高速采集、存储和实时分析需求。因此&#xff0c;越来越多的企业开始进行数据架构改造…...

迷宫(蓝桥杯省赛C/C++)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 下图给出了一个迷宫的平面图&#xff0c;其中标记为 1 的为障碍&#xff0c;标记为 0 的为可以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角&am…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练

本项目提出了ContentV框架&#xff0c;通过三项关键创新高效加速基于DiT的视频生成模型训练&#xff1a; 极简架构设计&#xff0c;最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略&#xff0c;利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...