博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF 自定义ItemsControl/ListBox/ListView控件样式
阅读量:5963 次
发布时间:2019-06-19

本文共 5627 字,大约阅读时间需要 18 分钟。

一、前言

ItemsControl、ListBox、ListView这三种控件在WPF中都可作为列表信息展示控件。我们可以通过修改这三个控件的样式来展示我们的列表信息。

既然都是展示列表信息的控件,那他们有什么相同点和不同点呢。

同:

  1、这三个控件都是列表型控件,可以进行列表绑定(ItemsSource);

  2、这三个控件均使用ItemsPresenter来展示列表信息;

异:

  1、ListBox继承于ItemsControl,比ItemsControl一个Selector对象;

  2、ListView继承于ListBox,比ListBox多一个View属性。

也就是说ItemsControl不支持列表项选择功能,ListBox支持单选、多选。ListView能以不同的视图形式展示列表信息。

下面我们通过例子来展现:

1.1、ItemsControl实现的图片选择预览控件

控件的效果如下:

下面贴上代码:

上面ItemsControl设置了ItemsPanel,由于我们的列表展示是横向的,所以设置StackPanel,并将Orientation设置为Horizontal。

里面有两个事件,添加图片UpLoadCaptrue_Click和移除图片ReMoveCaptrue_Click。代码如下:

public MainWindow(){      InitializeComponent();      this.itemsControl.ItemsSource = Capture;}public ObservableCollection
Capture = new ObservableCollection
();///
/// 上传截图/// ///
///
private void UpLoadCaptrue_Click(object sender, MouseButtonEventArgs e){ OpenFileDialog logoSelected = new OpenFileDialog(); logoSelected.Filter = "图片|*.jpg;*.png;*.bmp;*.gif"; if (logoSelected.ShowDialog() ==true) { Capture.Add(logoSelected.FileName); }}///
/// 移除截图/// ///
///
private void ReMoveCaptrue_Click(object sender, MouseButtonEventArgs e){ Capture.Remove(((Image)sender).DataContext.ToString());}

 控件中用到的素材:

 

1.2、基于ListBox实现用户列表展示

下面的实例一般用于通讯软件用户列表展示。主要是通过修改ListBoxItem的样式来实现。

先看下实现的效果:

大体思路:先定义ListBoxStyle,定义ListBox的Style是为了实现去掉列表项的间隙,默认的ListBox里面有Padding值。我们把Padding改为0;然后定义ListBoxItem项的Style样式,因为我们是通过绑定数据的方式呈现,因此对于需要动态显示的值我们把它放到一个类中。

public List
UserList { get; set; } public class UserInfo{ public Brush UserBackground { get; set; } public string Header { get; set; } public string Name { get; set; } public string Info { get; set; } public int Count { get; set; }}

ListBoxItem样式代码如下:

ListBox样式代码如下:

后台C#代码初始化数据,及设定数据源:

UserList = new List
() { new UserInfo(){ UserBackground=new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ff9f4c")), Header="群", Name="DESKTOP-0N", Info="我要像风一样自由!", Count=3 }, new UserInfo(){ UserBackground=new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ff9f4c")), Header="张", Name="张三丰", Info="我要像风一样自由!", Count=5 }, new UserInfo(){ UserBackground=new SolidColorBrush((Color)ColorConverter.ConvertFromString("#9d9d9d")), Header="鬼", Name="鬼见愁", Info="我要像风一样自由!", Count=2 }, }; this.UserInfoList.ItemsSource = UserList;

1.3、ListBoxView列表信息展示

ListBoxView信息展示有点像DataGrid控件,以下为ListBoxView基本样式代码:

                                                                                                                                                                       

引用示例:

后台代码需要给ListBoxView绑定数据:

public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            ListViewDataList = new List
(); for (int i = 0; i < 10; i++) { ListViewDataList.Add(new ListViewData() { Num = i, Name = "No_" + i.ToString(), Template="Temlate:"+i.ToString() }); } this.ListView.ItemsSource = ListViewDataList; } public List
ListViewDataList { get; set; } public class ListViewData { public int Num { get; set; } public string Name { get; set; } public string Template { get; set; } } }

 效果图:

 

所有代码已经上传到github:

转载于:https://www.cnblogs.com/xiaomingg/p/8733421.html

你可能感兴趣的文章
只要会营销,shi都能卖出去?
查看>>
sed单行处理命令奇偶行输出
查看>>
VC++深入详解学习笔记1
查看>>
安装配置discuz
查看>>
线程互互斥锁
查看>>
KVM虚拟机&openVSwitch杂记(1)
查看>>
win7下ActiveX注册错误0x80040200解决参考
查看>>
《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1-正确认识软件架构...
查看>>
2013 Linux领域年终盘点
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
HBase 笔记3
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
使用dotenv管理环境变量
查看>>
温故js系列(11)-BOM
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>