如何为ListBox配置两列布局并向各列填充对应数据
WPF ListBox 实现两列表格布局方法
要实现书籍标题、作者双列的表格类展示效果,通过自定义列表项模板、用Grid做两列布局即可完成,不需要引入额外组件,具体实现如下:
- 若要使用数据绑定规范实现,首先在后端定义书籍数据实体:
public class Book { public string BookTitle { get; set; } public string BookAuthor { get; set; } }
- 改写XAML代码,新增列表项模板划分两列,如需表头可在ListBox上方增加同列宽的Grid做标题栏,保证列对齐:
<!-- 表头区域,列宽比例和下方列表项完全一致 --> <Grid DockPanel.Dock="Top" Grid.Column="1" Grid.Row="1" Width="325" Margin="4,2"> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Text="书籍标题" FontWeight="SemiBold" Grid.Column="0"/> <TextBlock Text="作者" FontWeight="SemiBold" Grid.Column="1"/> </Grid> <ListBox DockPanel.Dock="Top" Grid.Column="1" Grid.Row="1" Height="200" Width="325" ScrollViewer.VerticalScrollBarVisibility="Visible"> <!-- 定义每个列表项的双列布局模板 --> <ListBox.ItemTemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Text="{Binding BookTitle}" Grid.Column="0"/> <TextBlock Text="{Binding BookAuthor}" Grid.Column="1"/> </Grid> </DataTemplate> </ListBox.ItemTemplate> <!-- 填充书籍数据 --> <local:Book BookTitle="Visual Basic" BookAuthor="Evangelos Petroutsos"/> <local:Book BookTitle="Silverlight" BookAuthor="Matthew MacDonald"/> <local:Book BookTitle="ASP.NET" BookAuthor="Adam Freeman"/> <local:Book BookTitle="WCF" BookAuthor="Juval Lowy"/> <local:Book BookTitle="Web Services" BookAuthor="Gustavo Alonso"/> <local:Book BookTitle="Windows Service" BookAuthor="Michael Gendler"/> </ListBox>
注意:XAML中的
local是当前项目命名空间的映射声明,需要在窗口/用户控件的根节点添加配置,格式为xmlns:local="clr-namespace:你的项目实际命名空间"。
- 如果不需要做动态数据绑定,也可以直接在每个
ListBoxItem内嵌套Grid实现双列,无需自定义模板:
<ListBox DockPanel.Dock="Top" Grid.Column="1" Grid.Row="1" Height="200" ScrollViewer.VerticalScrollBarVisibility="Visible"> <ListBoxItem> <Grid Width="325"> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Text="Visual Basic" Grid.Column="0"/> <TextBlock Text="Evangelos Petroutsos" Grid.Column="1"/> </Grid> </ListBoxItem> <!-- 其余列表项按照相同结构依次添加即可 --> </ListBox>
如果需要更标准的表格交互(比如列宽拖拽、列头排序、网格线),直接使用ListView搭配GridView会比自定义ListBox模板更简便。
内容的提问来源于stack exchange,提问作者HereToLearn
相关产品推荐
相关产品推荐

