内容高度时WP7 ScrollViewer错误> 2000像素

时间:2011-12-20 09:10:23

标签: windows-phone-7 xaml windows-phone scrollviewer

在我的项目中,我使用ScrollViewer显示一些很长的信息。

我这样用:

<Grid Grid.Row="1" Height="630">
     <ScrollViewer Background="Red" Grid.Row="1">
         <Grid>
             <Rectangle Height="3000" Fill="LightBlue" Width="440"/>
          </Grid>
     </ScrollViewer>
</Grid>

但是,不幸的是,当scrollView栏的垂直高度&gt;时,rectagnle不会完全显示。 2000。

我测试过没有Grid作为ScrollViewer的内容,只有Rectangle,结果是一样的。

Width也会发生错误。

你知道任何解决方法吗?怎么处理呢?

post是同一个问题,没有任何修复。

先谢谢了! -Jimmy


测试完整的xaml是:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
        <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
        <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>

    <Grid Grid.Row="1" Height="630">
        <ScrollViewer Background="Red" Grid.Row="1">
            <Grid>
                <Rectangle Height="3000" Fill="LightBlue" Width="440"/>
            </Grid>
        </ScrollViewer>
    </Grid>
</Grid>

2 个答案:

答案 0 :(得分:3)

如果它只是一个文本,您可以使用此自定义控件:scrollable textblock。否则,将您的内容划分为大小为&lt; 2048。

UPD:

2048px是GPU缓存图形的限制。您可以在scrollviewer中使用大量控件(&lt; 2048)(总计> 2048)。在某些情况下,一切都很好,但有些情况下并不是

例如:

<ScrollViewer Background="#4FFF6060">
    <Grid Background="#FFFF8A8A" Width="240" HorizontalAlignment="Left" d:LayoutOverrides="Height">
        <Rectangle Fill="Blue" Height="4000" VerticalAlignment="Top" Width="120" HorizontalAlignment="Left"/>
        <Rectangle Fill="Red" Height="2000" VerticalAlignment="Top" Width="120" HorizontalAlignment="Right"/>
        <Rectangle Fill="Red" Height="2000" VerticalAlignment="Top" Width="120" HorizontalAlignment="Right" Margin="0,2000,0,0"/>
    </Grid>
</ScrollViewer>

在这种情况下,蓝色矩形裁剪为2048像素,但两个高度为2000像素的矩形一个放在另一个上面看起来很好。

第二个示例使用StackPanel显示4000px区域,它也可以使用

<StackPanel Background="#FFFF8A8A" HorizontalAlignment="Right" Width="240" d:LayoutOverrides="Height">
    <Rectangle Fill="#FF88FF00" Height="2000" Width="240" HorizontalAlignment="Right"/>
    <Rectangle Fill="#FF88FF00" Height="2000" VerticalAlignment="Top" Width="240" HorizontalAlignment="Right"/>
</StackPanel>

答案 1 :(得分:3)

最大。 WP7上的纹理大小为2048x2048。矩形高度超出此限制。一旦将其降低到此限制以下,它就会开始工作。

此代码更适合实验,因为您可以识别底部边框:

<Grid Grid.Row="1" Height="630">
  <ScrollViewer Background="Red" Grid.Row="1">
    <Grid>
      <Border Height="2048" BorderBrush="Blue" BorderThickness="5">
        <Rectangle Height="2000" Fill="LightBlue" Width="440"/>
      </Border>
    </Grid>
  </ScrollViewer>
</Grid>

一旦增加边框高度,底部就会消失。

另一方面,我不得不说这种行为也让我感到惊讶。我希望系统将大对象分解为更小的纹理,但显然WP7设计者决定不这样做,而是显示UI错误。