WPF中如何设置DataGridCell内ComboBox撑满单元格全宽
问题描述
在WPF DataGrid的DataGridTemplateColumn单元格编辑模板中放置了ComboBox控件,原始实现代码如下:
<DataGrid.Columns> ... <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding Source={StaticResource LookUps}}" HorizontalAlignment="Center" DisplayMemberPath="LookUpName" SelectedValuePath="Id" SelectedValue="{Binding QLookupId, Mode=TwoWay}" IsEnabled="True" SelectionChanged="cbLookUp_SelectionChanged" /> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> ... </DataGrid.Columns>
需要实现的效果:配置ComboBox相关属性,使其完全覆盖所在DataGridCell的整个宽度。
实现方案
ComboBox无法铺满单元格的核心原因是当前设置了HorizontalAlignment="Center",该配置会让控件根据自身内容计算宽度后居中显示,不会自动拉伸占满父容器。按以下步骤修改即可:
- 把ComboBox的
HorizontalAlignment属性值从Center改为Stretch,设置后控件宽度会自动匹配父容器(DataGridCell)的可用宽度,是实现撑满效果的核心配置 - 如果修改后发现ComboBox和单元格边框之间存在空白,是因为DataGridCell默认自带2px内边距,给对应列配置CellStyle移除默认内边距即可消除留白
修改后的参考代码:
<DataGrid.Columns> ... <DataGridTemplateColumn> <!-- 移除DataGridCell默认内边距,消除边缘留白 --> <DataGridTemplateColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Padding" Value="0"/> <Setter Property="BorderThickness" Value="0"/> </Style> </DataGridTemplateColumn.CellStyle> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding Source={StaticResource LookUps}}" HorizontalAlignment="Stretch" DisplayMemberPath="LookUpName" SelectedValuePath="Id" SelectedValue="{Binding QLookupId, Mode=TwoWay}" IsEnabled="True" SelectionChanged="cbLookUp_SelectionChanged" /> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> ... </DataGrid.Columns>
补充:如果需要非编辑状态下单元格内的展示控件也铺满宽度,给
CellTemplate内的对应控件同样设置HorizontalAlignment="Stretch"即可。
内容的提问来源于stack exchange,提问作者PreviousDeveloper
相关产品推荐
相关产品推荐

