WPF组合框:多列宽度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF组合框:多列宽度相关的知识,希望对你有一定的参考价值。

我在WPF中有一个ComboBox,它包含列表部分的多个列。只要我明确指定列的宽度,一切正常。如果我为第一列的宽度指定“auto”,则网格结构会分解,并且每行的列不会彼此对齐。我想要的是第一列能够像它需要的那样宽,以便修复最长行的文本,另一列填充剩余的可用空间。

我的XAML如下:

<ComboBox x:Name="CommandListComboBox" Margin="95,0.48,110,30" ItemsSource="{Binding}" HorizontalContentAlignment="Stretch" SelectionChanged="CommandListComboBox_OnSelectionChanged" IsEditable="True" IsReadOnly="True" DisplayMemberPath="Description">
<ComboBox.ItemContainerStyle>
    <Style TargetType="{x:Type ComboBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Grid x:Name="gd" TextElement.Foreground="Black" Width="{Binding Path=ActualWidth,ElementName=CommandListComboBox}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="225"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Margin="5" Grid.Column="0" Text="{Binding Description}" TextWrapping="Wrap"/>
                        <TextBlock Margin="5" Grid.Column="1" Text="{Binding DeviceListText}" TextWrapping="Wrap"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ListBoxItem.IsSelected" Value="True">
                            <Setter TargetName="gd"  Property="Background" Value="Gray"/>
                            <Setter TargetName="gd"  Property="TextElement.Foreground" Value="White"/>
                        </Trigger>
                        <Trigger Property="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>

谢谢。

答案

为列创建SharedSizeGroup(替换<ColumnDefinition Width="225"/>

<ColumnDefinition Width="Auto" SharedSizeGroup="FirstColumn"/>

并在ComboBox上启用SharedSizeScope

<ComboBox x:Name="CommandListComboBox" Grid.IsSharedSizeScope="True" ...

以上是关于WPF组合框:多列宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何通过代码填充多列组合框?

多列组合框或 DataGridCombo Box 列缩小

WPF 中的多列列表框

绑定网格视图内的多列 devexpress 组合框

使用 WrapPanel 和 ScrollViewer 在 WPF 中提供多列列表框

从后面的代码中添加组合框项。 [WPF]