【问题标题】:How do I keep a specific xaml element within the window (so it doesn't overflow through the bottom)如何在窗口中保留特定的 xaml 元素(这样它就不会从底部溢出)
【发布时间】:2019-01-03 12:45:51
【问题描述】:

我正在尝试制作一个简单的发票申请作为评估的一部分。我制作了一个包含所有已请求项目的列表框的界面。但是,当我添加太多项目时,列表框会流过窗口底部,我必须调整窗口大小以适应。

我尝试了一个停靠面板,并将堆栈面板分配给网格本身。如果我设置一个固定的高度,它似乎可以按预期工作。

这是列表框的 xaml:

    <StackPanel Grid.Column="1" Grid.Row="0" ClipToBounds="True">
        <ListBox Name="Shirts" HorizontalContentAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Visible" Margin="5" ClipToBounds="True">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock>
                        <Run Text="{Binding ShirtSize}" />
                        <Run Text="{Binding ShirtStyle}" />
                        <Run Text="{Binding ShirtColour}" />
                    </TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button Content="Print Invoice" Margin="5" ClipToBounds="True"/>
    </StackPanel>

我希望代码能像这样工作(它的高度不是固定的,但它作为一个例子工作)。

它实际上是如何工作的。

【问题讨论】:

  • 是我还是两个附加的图像相同?
  • ListBox 和其他许多 wpf 控件一样,将根据 父容器允许 的内容调整 self 的大小,除非您设置其 Width 和/或 Height .要动态限制高度,您可以将ListBox.Height(或MaxHeight)绑定到其他元素ActualHeight

标签: c# xaml


【解决方案1】:

使用 DockPanel 而不是 StackPanel,它应该会更好地工作。 StackPanel 将随其内容一起增长,而不管其容器大小。 DockPanel 将尊重容器大小并填充可用空间。 Dock="Bottom" 将按钮按顺序排列,然后将 Dock="Fill" 排列在 ListBox 中(即使在按钮之后声明,列表也会自行排列在按钮上方,这有点不直观)

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多