【发布时间】:2011-06-09 20:56:17
【问题描述】:
WPF的ListBox和ListView有什么区别?我找不到它们的属性有任何显着差异。有不同的典型用途吗?
【问题讨论】:
-
答案中未提及:
ListView有列标题,ListBox没有
标签: .net wpf wpf-controls wpf-listview
WPF的ListBox和ListView有什么区别?我找不到它们的属性有任何显着差异。有不同的典型用途吗?
【问题讨论】:
ListView 有列标题,ListBox 没有
标签: .net wpf wpf-controls wpf-listview
ListView 基本上类似于ListBox(并从它继承),但它也有一个View 属性。此属性允许您指定显示项目的预定义方式。 BCL (Base Class Library) 中唯一的预定义视图是GridView,但您可以轻松地使用create your own。
另一个区别是默认选择模式:Single 对应 ListBox,而 Extended 对应 ListView
【讨论】:
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/ItemTemplate或ListBox编写更多代码。
【讨论】:
Listview 派生自列表框控件。 一个最重要的区别是 listview 默认使用扩展选择模式。 listview 还添加了一个名为 view 的属性,它使您能够以比自定义项目面板更丰富的方式自定义视图。 带有gridview 的listview 的一个真实示例是文件资源管理器的详细信息视图。 带有网格视图的 Listview 是一个功能较弱的数据网格。 引入datagrid控件后listview就失去了它的重要性。
【讨论】: