224

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

4

3 回答 3

240

AListView基本上就像 a ListBox(并从它继承),但它也有一个View属性。此属性允许您指定显示项目的预定义方式。BCL(基类库)中唯一的预定义视图是GridView,但您可以轻松创建自己的视图。

另一个区别是默认选择模式:它Single用于 a ListBox,但Extended用于 aListView

于 2011-01-16T03:37:33.390 回答
39

AListView让您为它定义一组,views并为您提供一种本地方式(WPF binding支持)来控制ListView使用 defined的显示views

例子:

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

输出:

普通视图:上面的视图 2XAML

普通的

MouseOver 视图:上面的视图 1XAML

鼠标移到

如果您尝试在 a 中实现上述目标,您可能最终会为/ ofListBox编写更多代码。ControlTempalateItemTemplateListBox

于 2016-04-24T09:57:16.623 回答
12

Listview 派生自列表框控件。一个最重要的区别是 listview 默认使用扩展选择模式。listview 还添加了一个名为 view 的属性,它使您能够以比自定义项目面板更丰富的方式自定义视图。带有gridview 的listview 的一个真实示例是文件资源管理器的详细信息视图。带有网格视图的 Listview 是一个功能较弱的数据网格。引入datagrid 控件后,listview 失去了它的重要性。

于 2016-09-03T15:35:56.127 回答