WPF - ListBox显示任意内容

原创 2013年03月02日 11:58:13

WFP是非常强大的。ListBox是一个很常用的控件,看了一下它的items属性,定义如下:

public ItemCollection Items { get; }

这是一个collection,我没有仔细研究ItemCollection类,我只看了一下ItemCollection的一个成员函数Add,定义如下:

public int Add(object newItem);

哈哈,它的参数是object类型,那么也就是说可以存放任何对象。

这么说来ListBox里面的items可以是任何对象,这样我们就可以在item里面显示任何我们想要的效果。

 

XAML静态显示ListBox

先来看看XAML里面如何显示一个listbox。随便写了个例子,如下:

        <ListBox Margin="15,12,0,0" Name="listBox1" Height="121" HorizontalAlignment="Left" VerticalAlignment="Top" Width="129">
            <ListBoxItem Background="Blue">item1</ListBoxItem>
            <ListBoxItem>
                <StackPanel Orientation="Horizontal">
                    <Ellipse Fill="Yellow" Height="50" Width="50"></Ellipse>
                    <Label>abcd</Label>
                </StackPanel>
            </ListBoxItem>
            <ListBoxItem>
                <StackPanel Orientation="Vertical">
                    <Rectangle Fill="Red" Height="50" Width="100"></Rectangle>
                    <TextBox>hello</TextBox>
                </StackPanel>
            </ListBoxItem>
        </ListBox>

放了3个item,注意每个item只能有一个child,如果我们把StackPanel去掉,那么就会报错。如:

error MC3089: The object 'ListBoxItem' already has a child and cannot add 'TextBox'. 'ListBoxItem' can accept only one child. Line 17 Position 30.

所以,当item里面需要显示多个控件的时候,就需要StackPanel或者其他类似的一个容器。


C#动态设置item

通常,listbox的内容是动态生成的,那么我们可以使用C#来设置内容,比如:

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            TextBox text = new TextBox();
            text.Text = "hello world";

            Ellipse ellipse = new Ellipse();
            ellipse.Height = 50;
            ellipse.Width = 50;
            ellipse.Fill = new SolidColorBrush(Color.FromRgb(255, 0, 0));
           

            StackPanel panel = new StackPanel();
            panel.Orientation = Orientation.Horizontal;

            panel.Children.Add(text);
            panel.Children.Add(ellipse);

            listBox2.Items.Add(panel);

            Label label = new Label();
            label.Content = "book";

            listBox2.Items.Add(label);
        }

增加几行代码来读取内容,如:

        private void listBox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            int i = listBox2.SelectedIndex;
            switch(i)
            {
                case 0:
                    StackPanel panel = (StackPanel)listBox2.SelectedItem;

                    TextBox text = (TextBox)panel.Children[0];

                    MessageBox.Show(text.Text, "hint");

                    break;
                case 1:
                    Label l = (Label)listBox2.SelectedItem;
                    MessageBox.Show((string)l.Content, "hint");
                    break;
                default:
                    break;
            }
        }


 

运行一下,左边的listbox是XAML设置内容的,右边的是动态生成的。



WPF学习笔记——ListBox用ItemsSource绑定数据源

protected class UserItem { public UserItem(int Id, string Name, bool IsActived) ...
  • leftfist
  • leftfist
  • 2014年05月10日 13:37
  • 28392

WPF之ListBox用法之一

介绍ItemTemplate用法以及在ItemTemplate模板中使用ListBoxItem属性的方法。 实现如下效果(点击某一项的时候该项图片进行放大): C#代码: using Syste...
  • lk13962517093
  • lk13962517093
  • 2014年03月25日 00:10
  • 5920

WPF ListBox

一、ListBox系列索引 1、WPF ListBox基础(包括ListBox多列展示,ListBox实现分页效果,ListBox绑定XML数据源) 2、ListBox 单击变大动画效果(使用模板...
  • Samsone
  • Samsone
  • 2012年01月12日 09:43
  • 39255

WPF ListBox 横向排列

如果只是单纯的让ListBox可以横向配列,这样很简单,只需要更改ListBox的ItemsPanel模板就可以,例如: ListBox> ListBox.ItemsPanel> Items...
  • chenghui2006
  • chenghui2006
  • 2017年09月14日 14:59
  • 238

在wpf中,关于ListBox里CheckBox横向排列

  • xsfqh
  • xsfqh
  • 2016年12月26日 15:00
  • 1014

【WPF】设置ListBox容器子控件的布局

设置ListBox.Template
  • qq_18995513
  • qq_18995513
  • 2017年01月21日 10:05
  • 1156

wpf中ListBox与ListView巧用

  • 2012年09月06日 11:16
  • 4KB
  • 下载

WPF中ListBox控件的使用

环境:VS2008 SP1+Northwind数据库1.直接在代码中使用ItemsSource进行绑定Data.NorthwindDataContext context = new Data.Nort...
  • Teng_s2000
  • Teng_s2000
  • 2008年12月11日 12:41
  • 16083

WPF中关于ListBox绑定数据的问题

在定义ListBox的ItemSource绑定时,出现了初次绑定有数据,但是数据变化时视图没有更新的情况。...
  • loveyou388i
  • loveyou388i
  • 2017年05月03日 09:19
  • 809

WPF listBox 显示每个Item的index值

在显示出来的Item中显示出当前Item的index值 Xaml文件如下:
  • SANYUNI
  • SANYUNI
  • 2015年05月08日 09:02
  • 1185
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF - ListBox显示任意内容
举报原因:
原因补充:

(最多只允许输入30个字)