RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 624861
Accepted
vitidev
vitidev
Asked:2020-02-08 06:48:53 +0000 UTC2020-02-08 06:48:53 +0000 UTC 2020-02-08 06:48:53 +0000 UTC

WPF 不在 StackPanel 内的 ListBox 上显示垂直滚动条

  • 772

代码虽然不是特别需要。

<StackPanel>
    <Button Click="ButtonBase_OnClick" Content="add item" />
    <ListBox ItemsSource="{Binding RectangleList}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Rectangle Width="50"
                           Height="50"
                           Margin="10"
                           Fill="Blue" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</StackPanel>

如果什么都没有改变,那么 ListBox 将不会滚动,即使它超出了屏幕。在英语中,假设 StackPanel 被拉伸以便一切都适合它,因为没有限制。

但是高度限制很奇怪。

如果 ListBox 设置了 Height,则当超过 Height 时将出现 ScrollBar。

但是,如果您设置 StackPanel 的高度,则内容将被截断并且 ListBox 将超出可见范围,但 ScrollBar 不会。

如果将 StackPanel 替换为 Grid,则 ListBox 会将 Grid 和父 Window 拉到屏幕上,但随后仍会出现令人垂涎的滚动条。

为什么 LisBox 会忽略 StackPanel 的高度?这是一个错误还是我遗漏了一些关于它是如何计算的?

wpf
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    VladD
    2020-02-08T07:42:01Z2020-02-08T07:42:01Z

    事实上,像StackPanel它们自己这样的布局面板会放置它们的子元素,解决它们的位置和(部分)大小问题。计算子元素的所需大小是通过调用 来完成的child.Measure,它将可用大小作为输入。

    根据文档,StackPanel在计算子元素的大小/位置时,它认为可用高度(水平情况下的宽度)是无限的。证明文本(“StackPanel vs. DockPanel”部分):

    例如,子元素的顺序会影响它们在 a 中的大小,DockPanel但不会影响 a 中的大小StackPanel。这是因为StackPanel 在堆叠方向上进行PositiveInfinity测量,而DockPanel仅测量可用尺寸。

    也就是说,在这一步中,MeasureOverride子元素在垂直方向上被赋予无限的可用尺寸。这意味着ListBox它将获得尽可能多的空间,因此不会显示滚动条。


    您可以在源代码中看到相同的内容:

    堆栈.cs/565:

    layoutSlotSize.Height = Double.PositiveInfinity;
    

    Stack.cs/583:

    child.Measure(layoutSlotSize);
    

    可以看出子元素得到了一个垂直无限槽来测量自己。


    看起来您可以从 中获得您想要的行为DockPanel。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5