ListBox 和 ListView 有啥区别
Posted
技术标签:
【中文标题】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
/ItemTemplate
或ListBox
编写更多代码。
【讨论】:
“隐藏代码”部分在 2019 年 4 月 29 日是无效代码(额外的右括号和 UpgradeProperty)。可以改正吗? 已经正确了。 UpdateProperty 是一种通知属性更改的方法。对你来说可能完全不同。使用您用来通知属性更改的任何方法。还有哪个额外的大括号? 谢谢你的解释。你是对的。我想我被大括号的位置迷住了。确实没有多余的大括号。如果您同意,我会重新检查一些代码。【参考方案3】:Listview 派生自列表框控件。 一个最重要的区别是 listview 默认使用扩展选择模式。 listview 还添加了一个名为 view 的属性,它使您能够以比自定义项目面板更丰富的方式自定义视图。 带有gridview 的listview 的一个真实示例是文件资源管理器的详细信息视图。 带有网格视图的 Listview 是一个功能较弱的数据网格。 引入datagrid控件后listview就失去了它的重要性。
【讨论】:
以上是关于ListBox 和 ListView 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
〝WPF〞中的〝ListBox〞、〝ListView〞和〝DataGridView〞有啥区别?
WPF中的ListBox,ListView和DataGridView有啥区别
突出显示 ListView 和 ListBox 控件中的第一行