我有一個綁定到gridview的項目列表,它在可用的屏幕區域上顯示一個項目。我的想法是,我希望用戶從可用集合中看到恰好一個項目,同時他能夠水平滾動左側或右側以顯示列表的下一個/上一個項目。爲此,我使用了一個GridView以及一個SnapPoints啓用的滾動查看器。我現在遇到的問題是,我無法讓GridView顯示默認選定項目,以便用戶在打開頁面後可以看到列表中的第4或第8個元素。我嘗試通過更改頁面加載後GridView的ScrollViewer的偏移量,但它似乎並沒有工作,並始終顯示所顯示的綁定列表中的第一個元素。奇怪的行爲是,一旦我調用ScrollToHorizontalOffset,滾動查看器的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>
我從頁面加載事件調用ScrollToHorizontalOffset。我也嘗試了ScrollViewer加載的事件,並得到相同的行爲。 GridView的加載事件也是如此。反正是有水平得到了綁定的SelectedItem網格視圖滾動
這是我使用調用ScrollToHorizontalOffset
int offset = (int)GetItemWidth(mainScrollViewer) *
(App.Locator.LearnWorkoutExercicesViewModel.CurrentExerciseIndex + 1);
mainScrollViewer.ScrollToHorizontalOffset(offset);
感謝
您是否能夠找出爲什麼ViewChanged被調用兩次? –