XAML嵌套ScrollView可以滚动到父级

时间:2020-07-17 15:13:35

标签: c# wpf scrollview platform-specific

我有一个具有这样结构的应用程序(其中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中,页面的呈现方式是这样的,左侧面板内是滚动条,这就是我想要的样子:

Page preview

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

enter image description here

如何获取内部ScrollView使其不超过其父网格?

我知道我可以给它一个固定的高度,但这不是我想要的,我已经尝试将ScrollView包裹在Grid中并绑定{{1}的高度}到ScrollView的{​​{1}}和Grid属性,以及父Height的{​​{1}}的相同属性

1 个答案:

答案 0 :(得分:0)

好像我找到了解决方案。我意识到,为了限制侧面板的高度并使其始终可见,我必须确保页面不会比框架大。为此,我必须将根Grid的高度绑定到ScrollView的{​​{1}}属性。我已经在ViewportHeight类中拥有一个属性,该属性就是这样的框架(用于导航):

MyPage.xaml.cs

MyPage

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

MyPage.xaml

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