在ScrollView中阻止Windows 8 XAML App中的页面扩展框架

时间:2014-01-30 13:08:56

标签: xaml windows-8.1

我正在创建一个基本应用程序来测试基于XAML的Windows 8应用程序中的某些功能。

我创建了以下结构来简化我的示例,但在真实的应用程序中它会更复杂:

<Page
    x:Name="pageRoot"
    x:Class="ScrollingTest.Xaml.MainPage"
    DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ScrollingTest.Xaml"
    xmlns:common="using:ScrollingTest.Xaml.Common"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ScrollViewer
            HorizontalScrollMode="Auto" 
            HorizontalScrollBarVisibility="Auto"
            VerticalScrollMode="Disabled"
            VerticalScrollBarVisibility="Hidden" Margin="0,0,0,10" VerticalContentAlignment="Stretch" BorderBrush="#FF0BC8FF" BorderThickness="1" Grid.Row="1" >

                <Frame Content="Frame" Name="theFrame" Margin="100" Width="3000" BorderBrush="Red" BorderThickness="1"
                       ScrollViewer.VerticalScrollMode="Enabled"
                       ScrollViewer.VerticalScrollBarVisibility="Visible"  />
        </ScrollViewer>
    </Grid>
</Page>

加载到Frame中的页面具有可变高度(它包含列表视图)。

问题在于随着子页面的高度增加,ScrollViewer的高度也增加,这意味着内容被强制离开屏幕底部。

我想要实现的是父级的水平滚动,然后在子页面上使用垂直滚动。在实际应用程序中,将有许多子页面,可能在网格内。

似乎将框架放在ScrollViewer中会破坏框架的内部滚动功能。

如果有人能让我知道更好的方法来实现我的最终结果或某些属性我需要改变,那么我将非常感激。

1 个答案:

答案 0 :(得分:1)

我最终使用了以下评论中的解决方案: XAML: Limiting size of control nested in ScrollViewer (to scroll nested within the ScrollViewer)

Height="{Binding ElementName=scrollViewer, Path=ActualHeight}"

不是我想要的,因为在改变方向时这不会自动应对但是必须这样做。

另一个选项是处理页面的SizeChanged事件并从事件处理程序(theFrame.Height = scrollViewer.ActualHeight)更新高度。这样它也可以应对改变方向。