Получить текущий контроль, когда выходит из поля зрения - PullRequest
0 голосов
/ 29 апреля 2019

Я создаю приложение наподобие instagram в uwp, я хочу, чтобы при воспроизведении видео, когда пользователь прокручивал его вниз / вверх, после того, как элемент управления не показывался на виде, видео автоматически приостанавливается (точно так же, как Instagram).

Я ничего не пробовал, потому что не знаю, с чего мне начать.

Вот мой xaml:

<Page.Resources>
    <DataTemplate x:Key="VideoTemplate">
        <MediaElement MinHeight="300" MaxHeight="400" AutoPlay="False" AreTransportControlsEnabled="True" Source="{Binding Uri, Mode=OneWay}" PosterSource="{Binding PosterSourceUri,Mode=OneWay}">
            <MediaElement.TransportControls>
                <MediaTransportControls IsCompact="True"/>
            </MediaElement.TransportControls>
        </MediaElement>
    </DataTemplate>
</Page.Resources>
<Grid>
    <ListView x:Name="LVPosts" 
              SelectionMode="None" 
              ScrollViewer.VerticalScrollMode="Enabled"
              ItemsSource="{Binding PostsGenerator.Items}"
              ContainerContentChanging="LVPostsContainerContentChanging">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Margin"
                                        Value="0" />
                <Setter Property="Padding"
                                        Value="5" />
                <Setter Property="HorizontalContentAlignment"
                                        Value="Stretch" />
                <Setter Property="VerticalContentAlignment"
                                        Value="Stretch" />
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsStackPanel Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>
</Grid>

Я подумал, что должен использовать событие ContainerContentChanging:

    int LatestItemIndex = -1;
    object LatestSelected = null;
    private void LVPostsContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
    {
        try
        {
            if (LatestItemIndex != -1 && args.ItemIndex != LatestItemIndex && LatestSelected != null
                && LatestSelected is MyModel uc && uc != null)
            {
                ((LVPosts.ItemsPanelRoot.Children[LatestItemIndex] as ListViewItem).ContentTemplateRoot as MediaElement).Stop();
            }
        }
        catch { }

        LatestSelected = args.Item;
        LatestItemIndex = args.ItemIndex;
    }

Но это не работает.

Как мне это сделать?

...