0

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

主窗口.xaml

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

我的页面.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不超过其父网格?

我知道我可以给它一个固定的高度,但这不是我想要的,我已经尝试将ScrollViewa包装起来Grid并将 the 的高度绑定ScrollView到 thatGridHeightActualHeight属性,以及与的相同属性RowDefinition父母的Grid

4

1 回答 1

0

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

我的页面.xaml.cs

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

因此,在 XAML 中,我能够像这样绑定高度:

我的页面.xaml

<Page ...>
    <Grid Height="{Binding Frame.Parent.ViewportHeight}">
        <!-- ... -->
    </Grid>
</Page>
于 2020-07-17T16:50:16.120 回答