WPF的ListBox和ListView有什么区别?我在它们的属性中找不到任何显著的区别。它们有不同的典型用途吗?
WPF的ListBox和ListView有什么区别?我在它们的属性中找不到任何显著的区别。它们有不同的典型用途吗?
ListView
基本上类似于一个 ListBox
(并且从它继承),但是它还有一个名为 View
的属性。该属性允许您指定预定义的显示项目的方式。在 BCL(Base Class Library)中,仅有一个预定义视图 GridView
,但您可以轻松地创建您自己的视图。
另一个区别是默认选择模式:对于 ListBox
,其选择模式为Single
,而对于 ListView
,其选择模式为Extended
。
ListView
允许你为其定义一组views
,并使用定义的views
以本地方式(WPF
binding
支持)控制 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>
后台代码:
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;
}
输出:
普通视图: 查看上面XAML
的第2个视图
鼠标悬停视图: 查看上面XAML
的第1个视图
如果您尝试在
ListBox
中实现以上功能,可能需要编写更多的ControlTemplate
/ItemTemplate
代码。
Listview继承自listbox控件。 其中一个最重要的区别是,listview默认使用扩展选择模式。listview还添加了一个名为view的属性,使您可以以比自定义itemspanel更丰富的方式自定义视图。 具有gridview的listview的一个真实示例是文件资源管理器的详细信息视图。 带有gridview的listview是一个功能较弱的数据网格。 在datagrid控件推出后,listview失去了其重要性。
ListView
有列标题,而ListBox
没有。 - Shahin Dohan