我有一个绑定到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被调用两次? –