4

次のような Windows ストア アプリ ページで定義された非常に基本的な GridView コントロールがあります。

    <GridView
        x:Name="myGridView"
        Grid.RowSpan="2"
        Padding="30,137,40,46"
        ItemsSource="{Binding Source={StaticResource myItemsViewSource}}"
        ItemTemplate="{StaticResource My500x500ItemTemplate}"
        SelectionMode="Multiple"
        IsSwipeEnabled="True"
        IsItemClickEnabled="True">

        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <Grid Margin="1,0,0,6">
                            <Button
                            Style="{StaticResource TextPrimaryButtonStyle}">
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding Title}" Margin="3,-7,10,10" Style="{StaticResource GroupHeaderTextStyle}" />
                                    <TextBlock Text="{StaticResource ChevronGlyph}" FontFamily="Segoe UI Symbol" Margin="0,-7,0,10" Style="{StaticResource GroupHeaderTextStyle}"/>
                                </StackPanel>
                            </Button>
                        </Grid>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <VariableSizedWrapGrid/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </GridView.GroupStyle>
    </GridView>

実行時に、期待どおりにバインドされたデータがコントロールにmyItemsViewSource表示されます。GridView

ただし、画面に表示できるよりも多くのアイテムがデータ ソースにある場合、奇妙なスクロールの問題が発生します。スクロールバーは、コレクションをスクロールしようとする私の努力に「抵抗」しているようで、ビューポートが「自由になり」、残りのアイテムをスクロールできるようになるまで、ビューポートをわずかに移動します。

問題の右スクロールのデモンストレーション

スティッキングポイントを超えたスムーズなスクロールのデモンストレーション

同じことが、右から左に戻るときにも起こります。スクロール領域の開始点に十分近づくまで、スクロールはスムーズに行われます。

問題の左スクロールのデモンストレーション

問題が仮想化に関係していると考えて、ItemsPanelGridViewStackPanelではなく に変更しようとしましVirtualizingStackPanelたが、アイテムが表示されなくなるというさらに悪い影響がありました。注: はGridView、他のスクロール領域またはキャンバスではホストされていません。

以下に回避策を投稿しますが、誰かがより満足のいく答えを持っていることを願っています。

4

3 に答える 3

3

実際の G​​ridView の左マージンとパディングを削除し、ItemsPanel 宣言に追加する必要があります。デフォルトのテンプレートにはグリッドビューにパディングが設定されているため、少し混乱します。

これは、GridView コントロールのパディングと、VirtualizingStackPanel ItemsPanel 宣言で設定されたマージンを編集した、既定のテンプレートに付属する GridView の開始部分です。

<GridView
        x:Name="itemGridView"
        AutomationProperties.AutomationId="ItemGridView"
        AutomationProperties.Name="Grouped Items"
        Grid.RowSpan="2"
        Padding="0,137,40,46"
        ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
        ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
        SelectionMode="None"
        IsSwipeEnabled="false"
        IsItemClickEnabled="True"
        ItemClick="ItemView_ItemClick">

        <GridView.ItemsPanel>
            <ItemsPanelTemplate>                        
                <VirtualizingStackPanel Margin="116,0,0,0" Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
于 2013-01-17T14:27:07.010 に答える
0

プロパティを削除してGridView.Padding置き換えるとGridView.Margin、「スティッキー スクロール」の問題が解決されます。

    <GridView
        x:Name="myGridView"
        Grid.RowSpan="2"
        Margin="30,137,40,46" <!-- replaced 'Padding' with 'Margin' -->
        ItemsSource="{Binding Source={StaticResource myItemsViewSource}}"
        ItemTemplate="{StaticResource My500x500ItemTemplate}"

        ...

ただし、Visual Studio GridView プロジェクト テンプレートは Margin ではなく Padding を使用するため、これは私には不可解です。

より満足のいく解決策を知っている人はいますか?

編集:誤解を招く記述を削除しました。

于 2012-11-11T14:55:14.300 に答える