10 WPF之 ListBox

ListBox 基础概念

ListBox 是 WPF 中常用的列表控件,用于显示一组可滚动的数据项,支持单选或多选。其核心特性包括:

  • 数据绑定:通过 ItemsSource 绑定集合数据(如 ObservableCollection<T>)。
  • 项模板:通过 ItemTemplate 自定义每一项的显示样式。
  • 选择模式:通过 SelectionMode 控制单选(Single)或多选(Extended)。

基本用法示例

<ListBox ItemsSource="{Binding Items}" SelectionMode="Extended">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}" Foreground="Blue"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

  • Items 是绑定的数据集合(需在 ViewModel 中定义)。
  • ItemTemplate 定义了如何显示每一项数据(此处用 TextBlock 显示 Name 属性)。

数据绑定与动态更新

若要实现动态数据更新(如增删项),需使用 ObservableCollection<T>

public class ViewModel
{
    public ObservableCollection<Item> Items { get; } = new ObservableCollection<Item>();
}

public class Item
{
    public string Name { get; set; }
}

在 XAML 中设置 DataContext 后,ListBox 会自动响应集合变化。

自定义样式

通过 ItemContainerStyle 修改项的外观(如悬停效果):

<ListBox.Resources>
    <Style TargetType="ListBoxItem">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border Background="{TemplateBinding Background}">
                        <ContentPresenter/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ListBox.Resources>

处理选择事件

通过 SelectionChanged 事件获取选中项:

<ListBox SelectionChanged="ListBox_SelectionChanged"/>

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var selectedItem = (sender as ListBox)?.SelectedItem as Item;
}

虚拟化提升性能

启用 VirtualizingStackPanel 优化大数据量性能:

<ListBox VirtualizingStackPanel.IsVirtualizing="True"/>

多列布局

通过 ItemsPanel 实现横向或网格布局:

<ListBox.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapPanel Orientation="Horizontal"/>
    </ItemsPanelTemplate>
</ListBox.ItemsPanel>

常见问题

  • 绑定失效:确保 DataContext 正确设置,且集合属性实现 INotifyPropertyChanged
  • 滚动问题:检查容器高度是否受限,或启用 ScrollViewer.VerticalScrollBarVisibility

通过上述方法,可灵活实现从简单列表到复杂交互场景的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值