什么是ListBox和ListView之间的区别

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

一个ListView基本上就像一个ListBox (并inheritance它),但它也有一个View属性。 该属性允许您指定显示项目的预定义方式。 BCL中唯一预定义的视图是GridView ,但是您可以轻松创build自己的视图。

另一个区别是默认的select模式: ListBoxSingleListView Extended

一个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; } 

OUTPUT:

普通视图:在上面的XAML查看2

正常

MouseOver View:在上面的XAML查看1

鼠标移到

如果你试图在一个ListBox实现上面的function,可能你最终会为ItemTemplateControlTempalate / ItemTemplate编写更多的代码。

ListView派生自列表框控件。 一个最重要的区别是默认使用扩展select模式。 listview还添加了一个名为view的属性,它使您能够以比定制项目面板更丰富的方式自定义视图。 一个用gridview实现listview的实例是文件浏览器的详细信息视图。 带有网格视图的ListView是一个不太强大的数据网格。 在引入datagrid控件后,listview失去了重要性。