以编程方式重置GridView / ListView的滚动位置(win store app)

时间:2013-05-13 12:39:32

标签: windows xaml windows-8 winrt-xaml

当用户选择ComboBox项时,我的GridView会重新填充。当用户将gridView滚动到gridview的中间并且他在comboBox中选择不同的项目时,问题就开始了,会发生什么是滚动看起来像是开始,但现在当你尝试向右移动时或者您看到滚动位置已更新并显示在用户选择不同组合框项目时的位置。此外,虽然滚动在开始时出现了一秒钟,但您可以看到,在这一秒中,gridview显示了中间r组(它是一个分组的网格视图)。 所以如上所述,我想在gridview填充后重置gridview scrool位置(到起始位置)。

这是gridview所有物:

<GridView x:Name="GridGames"
                      Grid.Row="3"
                      Grid.Column="1"
                      Grid.ColumnSpan="2"
                      VerticalAlignment="Top"
                      IsItemClickEnabled="True"
                      ItemClick="OnGameClick"
                      ItemTemplate="{StaticResource listView}"
                      ItemsSource="{Binding Source={StaticResource viewSource}}"
                      ScrollViewer.HorizontalScrollBarVisibility="Visible"
                      ScrollViewer.HorizontalScrollMode="Enabled"
                      ScrollViewer.IsHorizontalScrollChainingEnabled="False"
                      ScrollViewer.IsVerticalScrollChainingEnabled="False"
                      ScrollViewer.VerticalScrollBarVisibility="Disabled"
                      ScrollViewer.VerticalScrollMode="Disabled">
                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>
                <GridView.GroupStyle>
                    <GroupStyle>
                        <GroupStyle.HeaderTemplate>
                            <DataTemplate>
                                <Grid Margin="5,0,0,0">
                                    <TextBlock FlowDirection="LeftToRight"
                                               Style="{StaticResource eaderStyle}"
                                               Text="{Binding Key}" />
                                </Grid>
                                <!--  <local:GroupHeader Width="800" Height="35" />  -->
                            </DataTemplate>
                        </GroupStyle.HeaderTemplate>

                        <GroupStyle.Panel>
                            <ItemsPanelTemplate>
                                <VariableSizedWrapGrid Margin="0,0,20,0" Orientation="Vertical" />
                            </ItemsPanelTemplate>
                        </GroupStyle.Panel>
                    </GroupStyle>
                </GridView.GroupStyle>
            </GridView>
        </Grid>

这在当地资源中:

<Style TargetType="GridView">
            <Setter Property="Padding" Value="0,0,0,10" />
            <Setter Property="IsTabStop" Value="False" />
            <Setter Property="TabNavigation" Value="Once" />
            <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled" />
            <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Enabled" />
            <Setter Property="ScrollViewer.IsHorizontalRailEnabled" Value="False" />
            <Setter Property="ScrollViewer.VerticalScrollMode" Value="Disabled" />
            <Setter Property="ScrollViewer.IsVerticalRailEnabled" Value="False" />
            <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" />
            <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" />
            <Setter Property="ScrollViewer.BringIntoViewOnFocusChange" Value="True" />
            <Setter Property="IsSwipeEnabled" Value="True" />
            <Setter Property="ItemContainerTransitions">
                <Setter.Value>
                    <TransitionCollection>
                        <AddDeleteThemeTransition />
                        <ContentThemeTransition />
                        <ReorderThemeTransition />
                        <EntranceThemeTransition IsStaggeringEnabled="False" />
                    </TransitionCollection>
                </Setter.Value>
            </Setter>
            <Setter Property="ItemsPanel">
                <Setter.Value>
                    <ItemsPanelTemplate>
                        <WrapGrid Orientation="Vertical" />
                    </ItemsPanelTemplate>
                </Setter.Value>
            </Setter>
            <!--
                <Setter Property="Template">
                <Setter.Value>
                <ControlTemplate TargetType="GridView">
                <ItemsPresenter />
                </ControlTemplate>
                </Setter.Value>
                </Setter>
            -->
        </Style>


<Style TargetType="GridViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="GridViewItem">
                    <Border x:Name="LayoutRoot"
                            Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="PointerOver" />
                                <VisualState x:Name="Disabled" />
                                <VisualState x:Name="Pressed" />
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualState x:Name="Unselected" />
                                <VisualState x:Name="Selected" />
                                <VisualState x:Name="SelectedUnfocused" />
                                <VisualState x:Name="SelectedDisabled" />
                                <VisualState x:Name="SelectedPointerOver" />
                                <VisualState x:Name="SelectedPressed" />
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="FocusStates">
                                <VisualState x:Name="Focused" />
                                <VisualState x:Name="Unfocused" />
                                <VisualState x:Name="PointerFocused" />
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Grid x:Name="InnerGrid" Background="Transparent">
                            <Rectangle x:Name="PressedBackground"
                                       Fill="{StaticResource ListBoxItemPressedBackgroundThemeBrush}"
                                       Opacity="0" />
                            <ContentPresenter x:Name="ContentPresenter"
                                              Margin="0,0,5,5"
                                              HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                              Content="{TemplateBinding Content}"
                                              ContentTemplate="{TemplateBinding ContentTemplate}"
                                              ContentTransitions="{TemplateBinding ContentTransitions}" />
                            <Rectangle x:Name="FocusVisualWhite"
                                       Opacity="0"
                                       Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}"
                                       StrokeDashArray="1,1"
                                       StrokeDashOffset=".5"
                                       StrokeEndLineCap="Square" />
                            <Rectangle x:Name="FocusVisualBlack"
                                       Opacity="0"
                                       Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}"
                                       StrokeDashArray="1,1"
                                       StrokeDashOffset="1.5"
                                       StrokeEndLineCap="Square" />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 个答案:

答案 0 :(得分:1)

你如何(重新)填充gridview?你在重新填充之前将它设置为空吗?这可能有所帮助。

e.g。在用户选择组合框项目之后,在设置gridview的源之前尝试添加此项:

GridGames.ItemsSource = Nothing