【问题标题】:XAML Nested ScrollView leaves scrolling to parentXAML Nested ScrollView 离开滚动到父级
【发布时间】:2020-07-17 15:13:35
【问题描述】:

我有一个具有这样结构的应用程序(其中Frame 的内容设置为Page 例如MyPage

MainWindow.xaml

<Window ... Height="450" Width="800">
    <Grid>
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <Frame NavigationUIVisibility="Hidden" Source="Page1.xaml"/>
        </ScrollViewer>
    </Grid>
</Window>

MyPage.xaml

<Page ...>
    <Grid Background="GhostWhite">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="300"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid Background="Pink">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <TextBlock Grid.Row="0">Title</TextBlock>
            <ScrollViewer Grid.Row="1" Background="Yellow" VerticalScrollBarVisibility="Auto">
                <StackPanel>
                    <Rectangle Margin="10" Fill="Red" Width="250" Height="100"/>
                    <Rectangle Margin="10" Fill="Red" Width="250" Height="100"/>
                    <Rectangle Margin="10" Fill="Red" Width="250" Height="100"/>
                    <Rectangle Margin="10" Fill="Red" Width="250" Height="100"/>
                </StackPanel>
            </ScrollViewer>
        </Grid>
    </Grid>
</Page>

在 Visual Studio 中,页面呈现如下,左侧面板内有滚动条,这是我希望它看起来的样子:

但是,当我编译时,实际上最终发生的是页面的ScrollView 正在扩展以占用其内容的所有空间,而主窗口中的ScrollView 是显示滚动条的那个。像这样:

如何让内部ScrollView 不超过其父网格?

我知道我可以给它一个固定的高度,但这不是我想要的,我尝试将ScrollView 包装在Grid 中并将ScrollView 的高度绑定到@987654337 @ 的HeightActualHeight 属性,以及父GridRowDefinition 的相同属性

【问题讨论】:

  • 您可能想尝试与ScrollViewerViewportHeight (Docu) 绑定,而不是ActualHeight,其中包括不可见的部分。
  • 您需要主窗口中的滚动查看器吗?没有它,它可以按照您的意愿工作。
  • @Blechdose 我这样做了,框架的内容会动态变化,如果它溢出(大多数页面都会),那么它需要有一个滚动条(我不想在每个页)
  • @FlorianH。 ViewportHeight 是只读属性。我不能把它设置为任何东西。如果您要绑定其他内容,我不知道您的意思,请您详细说明一下,谢谢

标签: c# wpf scrollview platform-specific


【解决方案1】:

看来我找到了解决方案。我意识到,为了限制侧面板的高度并使其始终可见,我必须确保页面永远不会大于框架。为此,我必须将根Grid 的高度绑定到ScrollViewViewportHeight 属性。我已经在MyPage 类中有一个属性,它是这样的框架(用于导航目的):

MyPage.xaml.cs

public partial class MyPage : Page {
    public Frame Frame { get; }
    // ...
}

所以在 XAML 中我可以像这样绑定高度:

MyPage.xaml

<Page ...>
    <Grid Height="{Binding Frame.Parent.ViewportHeight}">
        <!-- ... -->
    </Grid>
</Page>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多