2013-06-26 38 views
1

后我增加了ScrollViewerItemsControlItemTemplate是动态生成的。ItemsControl中的ScrollViewer返回到起始位置的滚动

问题是ScrollViewer弹回到滚动后其初始位置。我试图设置网格容器Grid.Row="1"其中ScrollViewer谎言,以便它有足够的高度或设置它自动但问题仍然存在。我错过了什么?

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

    <!--TitlePanel contains the name of the application and page title--> 
    <StackPanel Grid.Row="0" Margin="12,17,0,28"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <TextBlock Text="{Binding GameLevel, Converter={StaticResource EnumToStringConverter}}" Style="{StaticResource PhoneTextNormalStyle}"/> 
      <TextBlock HorizontalAlignment="Right" Grid.Column="1" Style="{StaticResource PhoneTextNormalStyle}"> 
       <Run Text="GAME "/> 
       <Run Text="{Binding CurrentGame}"/> 
       <Run Text="/"/> 
       <Run Text="{Binding TotalGame}"/> 
      </TextBlock> 
     </Grid> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <TextBlock Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle2Style}"> 
       <Run Text="{Binding CurrentTime, Converter={StaticResource SecondsToMinutesHour}}"/> 
      </TextBlock> 
      <TextBlock Foreground="Green" HorizontalAlignment="Right" Grid.Column="1" Margin="9,-7,9,0" Style="{StaticResource PhoneTextTitle2Style}"> 
       <Run Text="{Binding TotalTime, Converter={StaticResource SecondsToMinutesHour}}"/> 
      </TextBlock> 

      <ProgressBar Grid.Row="1" Grid.ColumnSpan="2" x:Name="ProgressBar" Value="{Binding ProgressBarTime}" Minimum="0" Maximum="100" VerticalAlignment="Top" CacheMode="BitmapCache"/> 
     </Grid> 
    </StackPanel> 

    <!--ContentPanel - place additional content here--> 

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <ScrollViewer> 
     <ItemsControl x:Name="itemsControl" ItemsSource="{Binding Tiles}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <Canvas/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Tag="{Binding Index}" Loaded="FrameworkElement_OnLoaded"> 
         <Button Width="{Binding Side}" 
           Height="{Binding Side}" 
           Background="{Binding BgColor}"         
           Tag="{Binding Index}" 
          Content="{Binding Index}" 
          FontSize="{StaticResource PhoneFontSizeSmall}" 
           Click="Button_Click"> 

          <ia:Interaction.Triggers> 
           <ia:EventTrigger EventName="Loaded"> 
            <tr:SetCanvasPropertiesAction Left="{Binding Left}" Top="{Binding Top}" /> 
           </ia:EventTrigger> 
          </ia:Interaction.Triggers>        
         </Button> 
        </StackPanel> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
     </ScrollViewer>   
    </Grid> 

    <Grid x:Name="adGrid" Grid.Row="2" HorizontalAlignment="Center"/> 
</Grid> 

回答

2

编辑: 好,真正的问题是,该ItemsPnaelTemplate是Canvas。画布始终具有Height = 0和Width = 0。放置在画布上的项目可以更大,但仍在画布内。滚动查看器只有画布的高度,作为它应该能够滚动多少的想法。 您可以轻松地通过临时设置画布的高度测试:

<ItemsPanelTemplate> 
    <Canvas Height="1500"/> 
</ItemsPanelTemplate> 

你会看到,现在你可以滚动。

可惜我现在不能想到了解决办法。 (也许后面通过计算所需的宽度和高度dispay所有项目设置itemsControl通过代码的宽度和高度,通过采取与(上衣+边最高值的项目)为Height和(左+侧)为Width

原:

你的ContentPanel Grid有这个Height="Auto"。因此,ContentPanel与ScrollViewer的高度相同,并且它的所有内容和实际的滚动仍然可以实现,只是ScrollViewer的弹跳效果,当您到达滚动功能的末尾时。

只要删除Height="Auto",你应该罚款。

+0

的代码是没有的'高度=“自动”'之前,并没有工作。我再次删除它来确认,但仍然不起作用。 – PutraKg

+0

@我编辑我的答案,突出显示真正的问题。 –

+0

你说得对。在你编辑你的答案之前,我想到了这一点。我通过绑定画布高度来修复它''。 'CanvasHeight'通过添加项目的Top + Side来计算。现在滚动查看器按需要工作。 – PutraKg