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

WPF学习笔记(21)ListBox、ListView与控件模板

ListBox与控件模板

  • 一、 ListBox默认控件模板详解
  • 二、ItemsPresenter集合数据呈现
    • 1. 概述
    • 2. 示例
  • 三、 ListView默认控件模板详解
    • 1. 概述
    • 2. 示例


一、 ListBox默认控件模板详解

WPF 中的大多数控件都有默认的控件模板
这些模板定义了控件的默认外观和行为,包括控件的布局、背景、前景、边框、内容等。
官方文档:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/controls/listbox-styles-and-templates
在这里插入图片描述
在工具箱拖入Button控件,鼠标右键→编辑模板→编辑副本在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改此模板来定制列表框的一些显示,比如一直显示水平垂直滚动条,可以直接更改Auto为 Visible:在这里插入图片描述
演示效果如下:
在这里插入图片描述

二、ItemsPresenter集合数据呈现

1. 概述

ltemsPresenter类在控件模板中显示集合数据的一个占位符,以便在运行时将其替换为所有集合数据。
而ContentPresenter则只能显示单一内容。
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.itemspresenter?view=netframework-4.8
在这里插入图片描述

2. 示例

在这里插入图片描述
代码和运行结果如下

    <Grid><ListBox x:Name="listBox" d:ItemsSource="{d:SampleData ItemCount=5}" Width="300" Height="200"><ListBox.Template><ControlTemplate TargetType="ListBox"><Border BorderBrush="Aqua" BorderThickness="2" CornerRadius="50"><!--如果要多次呈现内容,需要使用布局--><StackPanel><ItemsPresenter/><Rectangle Width="auto" Height="10" Fill="Red"/><ItemsPresenter/></StackPanel></Border></ControlTemplate></ListBox.Template></ListBox></Grid>
 public class Stu{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }public Stu(int id, string name, int score){Id = id;Name = name;Score = score;}}public partial class MainWindow : Window{public MainWindow(){InitializeComponent();List<Stu> list = new List<Stu>{new Stu(1, "张三",100),new Stu(2, "李四", 80),new Stu(3, "王五", 75)};listBox.DisplayMemberPath = "Name";listBox.ItemsSource = list;}}

在这里插入图片描述

三、 ListView默认控件模板详解

1. 概述

官方文档:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/controls/listview-styles-and-templates

在工具箱拖入ListView控件,删除<ListView.View></ListView.View>内的所有内容,鼠标右键→编辑模板→编辑副本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 示例

在这里插入图片描述
参照官方文档中示例:

<!--创建标题和内容模板--><Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="ScrollViewer"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ScrollViewer"><Grid Background="{TemplateBinding Background}" ShowGridLines="True"><!--第二行,第二列为滚动条,可设置Visibility属性为True--><Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="*" /><RowDefinition Height="Auto" /></Grid.RowDefinitions><DockPanel Margin="{TemplateBinding Padding}"><!--头部标题--><ScrollViewer DockPanel.Dock="Top"HorizontalScrollBarVisibility="Hidden"VerticalScrollBarVisibility="Hidden"Focusable="false"><GridViewHeaderRowPresenter Margin="2,0,2,0"Columns="{Binding Path=TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderContainerStyle="{Binding Path=TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderTemplate="{Binding Path=TemplatedParent.View.ColumnHeaderTemplate,RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderTemplateSelector="{Binding Path=TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}"AllowsColumnReorder="{Binding Path=TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderContextMenu="{Binding Path=TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderToolTip="{Binding Path=TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}"SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /></ScrollViewer><!--滚动内容--><ScrollContentPresenter Name="PART_ScrollContentPresenter"KeyboardNavigation.DirectionalNavigation="Local"CanContentScroll="True"CanHorizontallyScroll="False"CanVerticallyScroll="False" /></DockPanel><!--定义水平滚动条--><ScrollBar Name="PART_HorizontalScrollBar"Orientation="Horizontal"Grid.Row="1"Maximum="{TemplateBinding ScrollableWidth}"ViewportSize="{TemplateBinding ViewportWidth}"Value="{TemplateBinding HorizontalOffset}"Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" /><!--定义垂直滚动条--><ScrollBar Name="PART_VerticalScrollBar"Grid.Column="1"Maximum="{TemplateBinding ScrollableHeight}"ViewportSize="{TemplateBinding ViewportHeight}"Value="{TemplateBinding VerticalOffset}"Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" /></Grid></ControlTemplate></Setter.Value></Setter></Style><Color x:Key="ControlLightColor">White</Color><Color x:Key="BorderMediumColor">#FF888888</Color><Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color><Style x:Key="{x:Type ListView}"
TargetType="ListView"><Setter Property="SnapsToDevicePixels" Value="true" /><Setter Property="OverridesDefaultStyle" Value="true" /><Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /><Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /><Setter Property="ScrollViewer.CanContentScroll" Value="true" /><Setter Property="VerticalContentAlignment" Value="Center" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListView"><Border Name="Border" BorderThickness="1"><Border.Background><SolidColorBrush Color="{StaticResource ControlLightColor}" /></Border.Background><Border.BorderBrush><SolidColorBrush Color="{StaticResource BorderMediumColor}" /></Border.BorderBrush><ScrollViewer Style="{DynamicResource{x:Static GridView.GridViewScrollViewerStyleKey}}"><ItemsPresenter /></ScrollViewer></Border><ControlTemplate.Triggers><Trigger Property="IsGrouping" Value="true"><Setter Property="ScrollViewer.CanContentScroll" Value="false" /></Trigger><Trigger Property="IsEnabled" Value="false"><Setter TargetName="Border" Property="Background"><Setter.Value><SolidColorBrush Color="{DynamicResource DisabledBorderLightColor}" /></Setter.Value></Setter></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style>

在这里插入图片描述

下面为简洁模式,不含标题行

<Style x:Key="myCT" TargetType="ListView"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListView"><Border Name="Border" BorderBrush="red" BorderThickness="1"><ScrollViewer><ItemsPresenter /></ScrollViewer></Border></ControlTemplate></Setter.Value></Setter>
</Style>
http://www.lqws.cn/news/606259.html

相关文章:

  • minio详细教程丨如何3分钟搭建minio
  • 操作系统考试大题-处理机调度算法-详解-1
  • Ollama最新快速上手指南:从安装到精通本地AI模型部署
  • 容器与 Kubernetes 基本概念与架构
  • pnpm 升级
  • 解决在Pom文件中写入依赖坐标后, 刷新Maven但是多次尝试都下载不下来
  • 使用开源项目youlai_boot 导入到ecplise 中出现很多错误
  • 【飞算JavaAI】智能开发助手赋能Java领域,飞算JavaAI全方位解析
  • Kuikly 与 Flutter 的全面对比分析,结合技术架构、性能、开发体验等核心维度
  • Flutter
  • Oracle 证书等级介绍
  • Rust 安装使用教程
  • 去中心化身份:2025年Web3身份验证系统开发实践
  • 【数据结构】排序算法:冒泡与快速
  • MacOS 安装brew 国内源【超简洁步骤】
  • transformers==4.42.0会有一个BUG
  • 从SEO到GEO:AI时代的品牌大模型种草与数字营销重构
  • Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list 更换国内镜像软件源 笔记250702
  • WPF学习笔记(20)Button与控件模板
  • 从模型部署到AI平台:云原生环境下的大模型平台化演进路径
  • 如快 Sofast:自定义快捷键 剪贴板智能管家快速查找搜索提升办公效率
  • 全面的 Spring Boot 整合 RabbitMQ 的 `application.yml` 配置示例
  • HarmonyOS学习记录2
  • Linux平台MinGW32/MinGW64交叉编译完全指南:原理、部署与组件详解
  • 计算机网络(五)数据链路层 MAC和ARP协议
  • RuoYi框架低代码特性
  • 医学+AI教育实践!南医大探索数据挖掘人才培养,清华指导发布AI教育白皮书
  • Java项目:基于SSM框架实现的软件工程项目管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • python: 字符串编码和解码
  • CAN转Modbus TCP网关赋能食品搅拌机智能协同控制