c# - ScrollViewer 不适用于 StackPanel

标签 c# xaml windows-runtime winrt-xaml scrollviewer

我的页面左侧有一个垂直 StackPanel,其中包含以下元素:

  • 1 个文本 block
  • 1 个包含多个元素的垂直 StackPanel 可填充可用空间

我正在尝试使用 ScrollViewer 元素使第二个 StackPanel 可滚动 但没有成功。如果我将 ScrollViewer 高度定义为某个值,它可以工作,但我不想这样做,因为我希望它填充所有可用的垂直空间。

我正在考虑在读取 StackPanel 计算高度的代码中应用 ScrollViewer 高度,但这似乎不是正确的方法。 我还尝试将 HeightActualHeight 绑定(bind)到 StackPanel Height 属性,但没有结果。

<ScrollViewer
    Grid.Row="1"
    VerticalAlignment="Top"
    VerticalScrollBarVisibility="Auto"
    HorizontalScrollBarVisibility="Disabled"
    ScrollViewer.VerticalScrollMode="Enabled"
    ScrollViewer.HorizontalScrollMode="Disabled"
    ScrollViewer.ZoomMode="Disabled">
    <StackPanel x:Name="sptest" Orientation="Vertical">
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test1</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test2</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test3</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test4</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test5</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test6</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test7</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test8</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test9</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test10</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test11</TextBlock>
        <TextBlock Style="{StaticResource PageHeaderTextStyle}">test12</TextBlock>
    </StackPanel>
</ScrollViewer>

此外,我还有一个填充水平可用空间的 GridView,它自动具有滚动条。我没有定义它,它会在必要时出现。奇怪的是 StackPanel 的行为不像我想要的那样。我做错了什么?

编辑

我找到了这个 SO question .它是关于 WPF 而不是 WinRT 但可能是同一个问题。它说:

You can't without fixing the height of the StackPanel. It's designed to grow indefinitely in one direction. I'd advise using a different Panel

我将我的 StackPanel 更改为 Grid(由于行定义我不想这样做,因为我只想要一列)但是 ScrollViewer 也不起作用。

最佳答案

睡了一夜之后,我通过将 parent StackPanel 更改为 Grid 解决了这个问题。我将第二个 StackPanel 保留在 ScrollViewer 元素中并且它有效。

我不知道为什么当 ScrollViewer 的父级是 StackPanel 而不是 Grid 时它不起作用。如果有人知道为什么请向我解释。我不想制作只有一列和两行的网格,因为这似乎是垂直 StackPanel 的目的。

尽管我在不知道为什么的情况下解决了它,但我希望这个问题能帮助其他遇到同样问题的人,如果你正在阅读这篇文章并且你可以解释这个问题,请告诉我......我很想知道。

关于c# - ScrollViewer 不适用于 StackPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15317618/

相关文章:

c# - 如何使控制台能够打印 65535 个 UNICODE 字符中的任何一个

c# - MenuItem 通过 RelayCommand ala MVVM-Light & Header 将所选项目传递给 ViewModel

c# - 将 SQLite 数据填充到 UWP 应用程序中

c# - 将 itemsource 与 ObservableCollection 绑定(bind)

windows-8 - 尝试重新打包 APPX 包时出现 SignTool 内部错误?

javascript - 无法在我的 flipview 中使用鼠标滚轮滚动

c# - 使用 linq 组运算符平展查询结果的正确方法是什么

wpf - Visual Studio 设计 View 包含黄色警告图标?

c# - 如何在 metroUI 的 webview 上显示下载的内容

c# - 从不装箱的情况下实现结构调用 C# 接口(interface)默认方法