WPF中如何让ComboBox内宽度为Auto的网格列对齐?
实现ComboBox下拉项CreationDate列宽度统一的方案
要让所有下拉行的CreationDate列宽度一致,只需要给对应列的ColumnDefinition添加SharedSizeGroup属性,让所有行的该列共享同一尺寸组即可。
修改后的完整代码:
<ComboBox Height="30" TextSearch.TextPath="Caption" SelectedItem="{Binding SelectedProject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding FilteredProjects}" HorizontalContentAlignment="Stretch"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Margin="2" Text="{Binding Caption}"/> </DataTemplate> </ComboBox.ItemTemplate> <ComboBox.ItemContainerStyle> <Style TargetType="{x:Type ComboBoxItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Grid x:Name="gd" TextElement.Foreground="Black"> <Grid.ColumnDefinitions> <!-- 添加SharedSizeGroup让列宽统一 --> <ColumnDefinition Width="Auto" SharedSizeGroup="DateColumn"/> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Border Grid.Column="0" BorderBrush="Gray" BorderThickness="0.2"> <TextBlock Padding="3" Text="{Binding CreationDate}" /> </Border> <Border Grid.Column="1" BorderBrush="Gray" BorderThickness="0.2" HorizontalAlignment="Stretch"> <TextBlock Padding="3" Text="{Binding Caption}" /> </Border> </Grid> <ControlTemplate.Triggers> <Trigger Property="ComboBoxItem.IsSelected" Value="True"> <Setter TargetName="gd" Property="Background" Value="Gray" /> <Setter TargetName="gd" Property="TextElement.Foreground" Value="White" /> </Trigger> <Trigger Property="ComboBoxItem.IsMouseOver" Value="True"> <Setter TargetName="gd" Property="Background" Value="Blue" /> <Setter TargetName="gd" Property="TextElement.Foreground" Value="White" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ComboBox.ItemContainerStyle> </ComboBox>
原理说明:
给ColumnDefinition设置相同的SharedSizeGroup名称(比如这里的DateColumn)后,WPF会自动计算该组内所有列的最大宽度,然后将组内所有列的宽度统一设置为这个最大值,这样所有下拉行的CreationDate列就会保持一致的宽度,不会再根据单行内容自适应调整。
内容的提问来源于stack exchange,提问作者Ali Tor
相关产品推荐
相关产品推荐

