什么是ListBox和ListView的区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

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

提问于
用户回答回答于

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

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

用户回答回答于

一个ListView让你定义了一套views它并为您提供原生的方式(WPF binding支持)来控制的显示ListView,通过使用规定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;
    }

OUTPUT:

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

MouseOver View:在上面查看1 XAML

如果你试图在a中达到上述目标ListBox,那么你最终可能会为ControlTempalate/ ItemTemplateof 写更多的代码ListBox

扫码关注云+社区