【问题标题】:Make WPF ComboBoxes fill a whole column width使 WPF 组合框填充整个列宽
【发布时间】:2016-06-05 12:21:52
【问题描述】:

我在将ComboBox 拉伸以填充GridViewColumn 中的整个列宽时遇到问题。调整列大小时,它也应该调整大小。

在下面的示例中,我有一个StackPanel,里面有一个ComboBox。这设置为拉伸,实际上将拉伸以填充StackPanel 宽度。

然后我添加一个带有一列的ListView,其中包含一个带有ComboBoxStackPanelStackPanelComboBox 都设置为拉伸,但它们没有。我使用背景颜色来标识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>

【问题讨论】:

  • 除非 StackPanel 中包含某些内容,否则使用边框可能会更好。
  • 意识到 StackPanel 可以省略。这个例子是我真正问题的简化——我似乎需要一个周围的 StackPanel。因此,我保留了它的问题。有关详细信息,请参阅我对@bendeway 答案的评论。
  • 重新成为您的版主标志;你错过了 12 月 26 日和 3 月 6 日(除非我错过了错误的日志)
  • 使用DockPanel 而不是StackPanel

标签: wpf combobox styles


【解决方案1】:

尝试设置StyleListViewItem。我还删除了您的 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="Horizo​​ntal" 的周围 StackPanel,则调整大小是平滑的。当我的列表中通常有 >1000 个元素时,就会出现此问题。知道什么给了这个吗?不使用您的解决方案,但添加 Background="Transparent" 会产生同样的问题。感觉我什么都试过了。。谢谢!
  • 可能会补充一点,添加一个水平方向的环绕 StackPanel 会阻止 ComboBox 填充整个列...
  • 嗯,你确实回答了这个问题,所以我要关闭这个问题。谢谢。请查看我关于列调整大小性能问题的新问题:stackoverflow.com/questions/829242/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 2013-05-29
相关资源
最近更新 更多