在 windows 10 中检测 GridView 内的 ScrollViewer 的 ViewChanged 事件

Detecting the ViewChanged event of the ScrollViewer inside a GridView in windows 10

我正在创建一个 windows 10 UWP 应用程序。 我有一个 GridView

  <GridView x:Name="gv" Margin="8,20,8,8" 
                  Grid.Row="1"
                  ItemClick="gv_ItemClick"
                  ScrollViewer.VerticalScrollBarVisibility="Visible"
                  ScrollViewer.VerticalScrollMode="Enabled"
                  IsItemClickEnabled="True"
                  SizeChanged="GridView_SizeChanged"
                  SelectionMode="Single">

                <GridView.ItemContainerStyle>
                    <Style TargetType="GridViewItem">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                        <Setter Property="VerticalContentAlignment" Value="Stretch"/>
                    </Style>

                </GridView.ItemContainerStyle>

                <GridView.ItemTemplate>
                    <DataTemplate>
                        <Grid >
                            <Image Source="{Binding thumbnailPath}"
                                   Stretch="UniformToFill" />
                        </Grid>
                    </DataTemplate>
                </GridView.ItemTemplate>
        </GridView>

因为里面已经有一个scrollviewer,所以我想触发这个scrollviewer的viewchanged事件。

我已经试过了,

var scrollViewer = gv.GetFirstDescendantOfType<ScrollViewer>();

ScrollViewer scroll = FindFirstElementInVisualTree<ScrollViewer>(gv);

两者似乎都是 return 空引用! 我哪里错了?

这个问题对你有帮助:

Detecting a scroll event in GridView (Windows 8)

您可以通过以下方式实现:WinRT XAML 工具包中的 GetFirstDescendantOfType 和 GetDescendantsOfType 扩展方法。

请看这个 post : http://mikaelkoskinen.net/post/WinRT-XAML-Automatically-Scrolling-ListView-to-Bottom-and-Detecting-When-ListView-is-Scrolled

更新:

在同一个问题中,有一个很好的解决方法:

Edit a template of the GridView, and look inside the XAML to find a ScrollViewer which is a component of the GridView.

The ScrollViewer has a ViewChanged event that you can subscribe to. Now whenever the GridView is scrolled, this event will be fired.

试试吧!