问题 使WPF ComboBoxes填充整个列宽


我做错了 ComboBox 拉伸以填充整个列宽 GridViewColumn。调整列的大小时也应调整大小。

在下面的例子中,我有一个 StackPanel 用一个 ComboBox 内。这将设置为拉伸,实际上将伸展以填补 StackPanel 宽度。

然后我添加一个 ListView 一列,包含一个 StackPanel 用一个 ComboBox。这俩 StackPanel 和 ComboBox 被设定为伸展,但他们没有。我使用背景颜色来识别尺寸 StackPanels,除非我设置宽度或添加元素,否则没有红色 ComboBox 这样它需要更多的宽度。

我也试过玩弄 HorizontalContentAlignment 财产没有成功。

<StackPanel Height="59" Margin="45,12,38,0" VerticalAlignment="Top" Background="Green">
    <ComboBox HorizontalAlignment="Stretch" />
</StackPanel>

<ListView x:Name="MyListView" Margin="0,106,0,0">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Num" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Background="red" Orientation="Horizontal" HorizontalAlignment="Stretch">
                            <ComboBox HorizontalAlignment="Stretch" />
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
    <ListViewItem></ListViewItem>
</ListView>

7858
2018-05-05 21:30


起源

除非StackPanel中有东西,否则你可能会更好地使用Border。 - Jeff Wain
意识到StackPanel可以省略。这个例子是我真实问题的简化 - 我似乎需要一个周围的StackPanel。所以我保留了这个问题。有关详细信息,请参阅我对@ bendeway的答案的评论。 - stiank81
重新审核你的主持人标志;你错过了12月26日和3月6日(除非我错过了日志错误) - Marc Gravell♦
使用 DockPanel 代替 StackPanel - Aaaaaaaa


答案:


尝试设置 Style 的 ListViewItem。我还删除了你的StackPanel。

<ListView x:Name="MyListView" Margin="0,106,0,0">
    <ListView.Resources>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListView.Resources>

    <ListView.View>
        <GridView>
            <GridViewColumn Header="Num" Width="170">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>

    <ListViewItem></ListViewItem>
</ListView>

15
2018-05-05 21:50



谢谢!然而,这很有效 - 它给了我一个新问题。好吧,在简单的例子中,我提出的问题一切都很好,但我的真实列表更复杂。添加样式时 - 没有任何StackPanel - 调整列的大小非常慢。如果我添加一个具有属性Orientation =“Horizo​​ntal”的周围StackPanel,则调整大小是平滑的。当我的列表中通常有> 1000个元素时会发生此问题。知道是什么给了这个吗?不使用您的解决方案,但添加Background =“Transparent”会产生同样的问题。感觉就像我尝试了一切..谢谢! - stiank81
可能会添加一个水平方向添加周围的StackPanel会阻止ComboBox填充整个列... - stiank81
好吧,你确实回答了这个问题,所以我关闭了这个问题。谢谢。请查看有关列调整大小性能问题的新问题: stackoverflow.com/questions/829242/... - stiank81