什么是ListBox和ListView之间的区别
WPF的ListBox和ListView有什么区别? 我找不到他们的属性有任何显着的差异。 有不同的典型用途吗?
一个ListView
基本上就像一个ListBox
(并inheritance它),但它也有一个View
属性。 该属性允许您指定显示项目的预定义方式。 BCL中唯一预定义的视图是GridView
,但是您可以轻松创build自己的视图。
另一个区别是默认的select模式: ListBox
是Single
, ListView
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,可能你最终会为ItemTemplate
的ControlTempalate
/ItemTemplate
编写更多的代码。
ListView派生自列表框控件。 一个最重要的区别是默认使用扩展select模式。 listview还添加了一个名为view的属性,它使您能够以比定制项目面板更丰富的方式自定义视图。 一个用gridview实现listview的实例是文件浏览器的详细信息视图。 带有网格视图的ListView是一个不太强大的数据网格。 在引入datagrid控件后,listview失去了重要性。