不影响列宽的 WPF ComboBox

WPF ComboBox that does not influence column width

如何让 ComboBox 不影响其所在网格的列宽?

这是一个最小的例子:

<StackPanel Orientation="Vertical">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Label>This is some text</Label>
        <Label Grid.Row="1">This is some text</Label>
        <GridSplitter Grid.Column="1" Grid.RowSpan="2" HorizontalAlignment="Stretch"/>
        <Label Grid.Column="2" Background="Beige" HorizontalAlignment="Right">This is some text</Label>
        <ComboBox Grid.Row="1" Grid.Column="2">
            <ComboBoxItem IsSelected="True">This is some text</ComboBoxItem>
            <ComboBoxItem>This is some really lengthy text that is really long</ComboBoxItem>
        </ComboBox>
    </Grid>
</StackPanel>

选择第二个项目时,Combobox会更改其大小,并与之一起更改第三列的大小(可以通过标签的米色背景可以看出)。

即使 space 足以完全显示米色标签中的文本,有时也会出现在可见区域之外的效果:

我想要的是第三列始终具有米色标签的宽度(或该列中的任何其他元素不是 ComboBox),并且 ComboBox 缩短其文本以适合该宽度. ComboBox的popup部分可以大一些,我这里只说button部分。我已经尝试设置一个 ComboBox,其 TextBlock Content 和 TextTrimming 设置为 CharacterEllipsis,但无济于事。

设置组合框控件的最大宽度。它将允许组合框扩展到该值。如果你想要一个固定的宽度,那么你需要设置组合框的宽度 属性。

您可以像

一样使用 Combobox 的宽度 属性
<ComboBox Grid.Row="1" Grid.Column="2" Width="200">

文本换行也可能对您有所帮助,以下 link 有一个示例,说明如何为组合框使用文本换行:ComboBox TextWrap Binding

这里应该为您完成:

<StackPanel Orientation="Vertical">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Label>This is some text</Label>
        <Label Grid.Row="1">This is some text</Label>
        <GridSplitter Grid.Column="1" Grid.RowSpan="2" HorizontalAlignment="Stretch"/>
        <Label x:Name="Label" Grid.Column="2" Background="Beige" HorizontalAlignment="Right">This is some text</Label>
        <ComboBox Grid.Row="1" Grid.Column="2" Width="{Binding ElementName=Label, Path=ActualWidth, Mode=OneWay}">
            <ComboBoxItem IsSelected="True">This is some text</ComboBoxItem>
            <ComboBoxItem>This is some really lengthy text that is really long</ComboBoxItem>
        </ComboBox>
    </Grid>
</StackPanel>

以下代码供您参考

<Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="4*"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <ComboBox HorizontalAlignment="Stretch" Grid.Column="1">