不影响列宽的WPF ComboBox

时间:2016-12-20 13:55:11

标签: c# wpf wpf-controls

如何告诉ComboBox不影响它所在网格的列宽?

这是一个最小的例子:

library(geosphere)
Caps = cbind(world.cities$long, world.cities$lat)
CapDistMatrix = distGeo(Caps, Caps)

当选择第二个项目时,ComboBox会更改其大小,并与其一起更改第三列的大小(可以通过标签的米色背景看到)。 enter image description here

即使有足够的空间可以完全展示它,这也会导致米色标签中的文字有时位于可见区域之外:

enter image description here

我想要的是第三列总是具有米色标签的宽度(或列中的任何其他元素而不是ComboBox),并且ComboBox缩短其文本以使其适合该宽度。 ComboBox的弹出部分可以更大,我只是在这里谈论按钮部分。我已经尝试将TextBlock内容和TextTrimming设置为CharacterEllipsis的ComboBox设置,但无济于事。

4 个答案:

答案 0 :(得分:2)

这里应该为你做这件事:

<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>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用Combobox的Width属性,如

<ComboBox Grid.Row="1" Grid.Column="2" Width="200">

文字自动换行也可以帮助您,以下链接有一个示例,说明如何使用文本换行组合框:ComboBox TextWrap Binding

答案 3 :(得分:0)

以下是供您参考的代码

&#13;
&#13;
<Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="4*"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <ComboBox HorizontalAlignment="Stretch" Grid.Column="1">
&#13;
&#13;
&#13;