listview和listbox有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了listview和listbox有啥区别?相关的知识,希望对你有一定的参考价值。

listview 类似 gridview , 表现很丰富, 可以显示图标,有多列

LISTBOX 很简单, 就一列,就是简易的 COMBOBOX
参考技术A ListBox
This is a regular listbox control. It enables the user to select a value of a property from a pre-authored list of choices. This control supports only single select listboxes. The possible values are read from the Listbox Table. Note that the string displayed is not necessarily the same as the value that the user is choosing. If the control is created with the Sorted, the items are listed according to the Ordering column of the table. If the style bit is not set, the column is ignored.
ListBox 控件显示项目列表,从其中可以选择一项或多项。如果项目总数超过了可显示的项目数,就自动在 ListBox 控件上添加滚动条。

ListView
The ListView control displays items using one of four different views. You can arrange items into columns with or without column headings as well as display accompanying icons and text.
ListView 控件可使用四种不同视图显示项目。通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本。 ListView 控件是 Mscomctl.ocx 文件中一组 ActiveX 控件的一部分。若要在应用程序中使用 ListView 控件,则必须将 Mscomctl.ocx 文件添加到工程中。当发行应用程序时,请将 Mscomctl.ocx 文件安装到用户的 Microsoft Windows System 或 System32 目录下。

ListBox 和 ListView 有啥区别

【中文标题】ListBox 和 ListView 有啥区别【英文标题】:What is The difference between ListBox and ListViewListBox 和 ListView 有什么区别 【发布时间】:2011-06-09 20:56:17 【问题描述】:

WPF的ListBox和ListView有什么区别?我找不到它们的属性有任何显着差异。有不同的典型用途吗?

【问题讨论】:

答案中未提及:ListView 有列标题,ListBox 没有 【参考方案1】:

ListView 基本上类似于ListBox(并从它继承),但它也有一个View 属性。此属性允许您指定显示项目的预定义方式。 BCL (Base Class Library) 中唯一的预定义视图是GridView,但您可以轻松地使用create your own。

另一个区别是默认选择模式:Single 对应 ListBox,而 Extended 对应 ListView

【讨论】:

【参考方案2】:

ListView 让您为其定义一组views,并为您提供一种本地方式(WPF binding 支持)通过使用定义的views 来控制ListView 的显示。

示例:

XAML

<ListView ItemsSource="Binding list" Name="listv" MouseEnter="listv_MouseEnter" MouseLeave="listv_MouseLeave">
        <ListView.Resources>
            <GridView x:Key="one">
                <GridViewColumn Header="ID" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="Binding id" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Name" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="Binding name" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
            <GridView x:Key="two">                    
                <GridViewColumn Header="Name" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="Binding name" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.Resources>
        <ListView.Style>
            <Style TargetType="ListView">
                <Style.Triggers>
                    <DataTrigger Binding="Binding ViewType" Value="1">
                        <Setter Property="View" Value="StaticResource one" />
                    </DataTrigger>
                </Style.Triggers>
                <Setter Property="View" Value="StaticResource two" />
            </Style>
        </ListView.Style>  

Code Behind:

private int viewType;

public int ViewType

    get  return viewType; 
    set 
     
        viewType = value;
        UpdateProperty("ViewType");
    
        

private void listv_MouseEnter(object sender, MouseEventArgs e)

    ViewType = 1;


private void listv_MouseLeave(object sender, MouseEventArgs e)

    ViewType = 2;

输出:

普通视图:上面的视图 2 XAML

MouseOver 视图:在上方查看 1 XAML

如果您尝试在ListBox 中实现上述目标,您可能最终会为ControlTempalate/ItemTemplateListBox 编写更多代码。

【讨论】:

“隐藏代码”部分在 2019 年 4 月 29 日是无效代码(额外的右括号和 UpgradeProperty)。可以改正吗? 已经正确了。 UpdateProperty 是一种通知属性更改的方法。对你来说可能完全不同。使用您用来通知属性更改的任何方法。还有哪个额外的大括号? 谢谢你的解释。你是对的。我想我被大括号的位置迷住了。确实没有多余的大括号。如果您同意,我会重新检查一些代码。【参考方案3】:

Listview 派生自列表框控件。 一个最重要的区别是 listview 默认使用扩展选择模式。 listview 还添加了一个名为 view 的属性,它使您能够以比自定义项目面板更丰富的方式自定义视图。 带有gridview 的listview 的一个真实示例是文件资源管理器的详细信息视图。 带有网格视图的 Listview 是一个功能较弱的数据网格。 引入datagrid控件后listview就失去了它的重要性。

【讨论】:

以上是关于listview和listbox有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

〝WPF〞中的〝ListBox〞、〝ListView〞和〝DataGridView〞有啥区别?

WPF中的ListBox,ListView和DataGridView有啥区别

vb comboBOx和listBox两个属性有啥不同?

wpf ListBox或ListView等数据控件 绑定数据,最简单的方式

VB listbox中list和text属性区别

c# ListView和DataGridView 有啥区别