0

我有一個綁定到gridview的項目列表,它在可用的屏幕區域上顯示一個項目。我的想法是,我希望用戶從可用集合中看到恰好一個項目,同時他能夠水平滾動左側或右側以顯示列表的下一個/上一個項目。爲此,我使用了一個GridView以及一個SnapPoints啓用的滾動查看器。我現在遇到的問題是,我無法讓GridView顯示默認選定項目,以便用戶在打開頁面後可以看到列表中的第4或第8個元素。我嘗試通過更改頁面加載後GridView的ScrollViewer的偏移量,但它似乎並沒有工作,並始終顯示所顯示的綁定列表中的第一個元素。奇怪的行爲是,一旦我調用ScrollToHorizo​​ntalOffset,滾動查看器的ViewChanged事件會被提升兩次,第一個我可以清楚地看到偏移量已更新爲我默認選定項目的位置,但第二個偏移量重置回到第一個項目。 Bellow它是我用於網格視圖的xaml片段。在GridView中設置默認的ScrollViewer位置/顯示元素

  <GridView x:Name="ContentRoot" 
      Grid.Row="1" 
      IsSwipeEnabled="True" 
      IsItemClickEnabled="false" 
      ItemsSource="{Binding CurrentWorkout.Exercises}" 
      SelectedItem="{Binding CurrentExercise}"    
       > 
      <GridView.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="*" /> 
         </Grid.RowDefinitions> 
         <Image Source="{Binding LargeImagePath}" Width="160" Height="160" HorizontalAlignment="Center" 
          VerticalAlignment="Top" Margin="20,10" /> 
         <TextBlock Grid.Row="1" Text="{Binding Name}" Margin="24,10" FontSize="30" VerticalAlignment="Top" 
         Style="{StaticResource BaseTextBlockStyle}" HorizontalAlignment="Center" TextAlignment="Center" 
         TextWrapping="Wrap" Typography.Capitals="SmallCaps" IsTextScaleFactorEnabled="False" /> 
         <ScrollViewer Grid.Row="2"> 
          <TextBlock Text="{Binding Description}" Margin="24" Style="{StaticResource BaseTextBlockStyle}" 
           HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Top" 
           TextWrapping="Wrap" Typography.Capitals="SmallCaps" IsTextScaleFactorEnabled="False" /> 
         </ScrollViewer> 
        </Grid> 
       </DataTemplate> 
      </GridView.ItemTemplate> 
      <GridView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapGrid ItemWidth="380" Loaded="FrameworkElement_OnLoaded" 
          HorizontalAlignment="Stretch" VerticalAlignment="Top" IsTapEnabled="False" 
          /> 
       </ItemsPanelTemplate> 
      </GridView.ItemsPanel> 
      <GridView.Template> 
       <ControlTemplate TargetType="GridView"> 
        <ScrollViewer HorizontalScrollBarVisibility="Disabled" HorizontalScrollMode="Enabled" 
            VerticalScrollMode="Disabled" VerticalScrollBarVisibility="Disabled" 
            x:Name="GridScrollViewer" HorizontalSnapPointsType="MandatorySingle" 
            HorizontalSnapPointsAlignment="Near" 
            ViewChanged="ScrollViewer_OnViewChanged"> 
         <ItemsPresenter /> 
        </ScrollViewer> 
       </ControlTemplate> 
      </GridView.Template> 
     </GridView> 

我從頁面加載事件調用ScrollToHorizo​​ntalOffset。我也嘗試了ScrollViewer加載的事件,並得到相同的行爲。 GridView的加載事件也是如此。反正是有水平得到了綁定的SelectedItem網格視圖滾動

這是我使用調用ScrollToHorizo​​ntalOffset

 int offset = (int)GetItemWidth(mainScrollViewer) * 
        (App.Locator.LearnWorkoutExercicesViewModel.CurrentExerciseIndex + 1); 
     mainScrollViewer.ScrollToHorizontalOffset(offset); 

感謝

+0

您是否能夠找出爲什麼ViewChanged被調用兩次? –

回答

0

從您的查詢的分析代碼,我注意到你已經設置了HorizontalScrollBarVisibility="Disabled"。在GridView.Template 如果禁用水平滾動條可見性是不是你的要求, 您可以通過

GridView.Template和 使用ScrollViewer.ScrollToHorizontalOffset(your desire offset)ScrollViewerScrollViewer.ChangeView(your desire offset, 0, 1)塞汀HorizontalScrollBarVisibility="Visible"滾動到特定的偏移實現它。

0

這是一個相當晚的答案,但您試圖實現的結果(1個顯示的項目,從一個項目滾動到另一個項目時捕捉到位)似乎是FlipView的確切定義。你有沒有考慮過使用FlipView而不是GridView?