使WPF的组合框填满整个列宽

12

我在尝试让 ComboBoxGridViewColumn 中充满整个列的宽度时遇到了问题。当调整列的大小时,它应该也能自动调整大小。

以下示例中,我有一个带有 ComboBoxStackPanel。这个 ComboBox 被设置为自适应并会实际拉伸以填充整个 StackPanel 宽度。

接下来,我添加了一个只包含一个 StackPanel 和一个 ComboBox 的单列 ListView。但是,无论是 StackPanel 还是 ComboBox 都没有被自适应拉伸。我使用背景颜色来识别 StackPanel 的大小,在没有设置宽度或向 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>

除非StackPanel中将要放置一些内容,否则使用Border可能会更好。 - Jeff Wain
知道StackPanel可以省略。这个例子是我真正问题的简化版本 - 在那里我似乎需要一个周围的StackPanel。因此,我将其保留用于问题。有关详细信息,请参见我的评论@bendeway的答案。 - stiank81
关于您的主持人标记;除非我错过了日志,否则您错过了12月26日和3月6日。 - Marc Gravell
请使用 DockPanel 而不是 StackPanel - Aaaaaaaa
1个回答

18

尝试设置 ListViewItemStyle。我还删除了你的 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>

谢谢!这个方法可以用,但是它给我带来了一个新问题。在我提出问题的简化示例中,一切都很好,但是我的实际列表更加复杂。当添加样式时 - 没有任何StackPanel - 调整列大小非常缓慢。如果我添加一个具有属性Orientation="Horizontal"的周围StackPanel,则调整大小会很平滑。当我的列表中通常有>1000个元素时,就会出现这个问题。有什么想法吗?不使用您的解决方案,但添加Background="Transparent"会出现相同的问题。感觉我已经尝试了所有东西..谢谢! - stiank81
3
可以尝试添加一个水平排列的周围 StackPanel,这样可以防止 ComboBox 填满整个列... - stiank81
好的,你回答了这个问题,所以我要关闭它。谢谢。请查看我的有关列调整大小性能问题的新问题:https://dev59.com/tEfRa4cB1Zd3GeqP9XlZ - stiank81

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接