[C# UWP] How do I reach all MediaPlayer elements in a GridView?

SpectraCoder 141 Reputation points

In my app I have a page with a GridView with a DataTemplate that has a MediaPlayer element that is bound to a list of sources. Each MediaPlayer element has to stop playing when the user leaves the page. I wanted to solve this by pausing the MediaPlayers when the user clicks a button that goes to another page, but I can't get my head around on how to pause the players when they are generated by the GridView.

How do I reach each instance of the MediaPlayer to be able to pause them?

<GridView Name="Gridview" Grid.Row="1" ItemsSource="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center" SelectionMode="None">  
                <DataTemplate x:DataType="local:TutorialVideo">  
                    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">  
                        <TextBlock Text="{Binding Title}" Style="{ThemeResource SubheaderTextBlockStyle}" Margin="10"/>                          
                        <MediaPlayerElement Name="player" MinWidth="500" MaxWidth="800" AreTransportControlsEnabled="True" Source="{Binding Source}" Margin="10"/>                          
Universal Windows Platform (UWP)
0 comments No comments
{count} votes

Accepted answer
  1. SpectraCoder 141 Reputation points

    Never mind, solved it! I used this piece of code I found online:

    public static IEnumerable<T> FindVisualChildren<T>(DependencyObject objectToSearchThrough) where T : DependencyObject  
                if (objectToSearchThrough != null)  
                    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(objectToSearchThrough); i++)  
                        DependencyObject child = VisualTreeHelper.GetChild(objectToSearchThrough, i);  
                        if (child != null && child is T)  
                            yield return (T)child;  
                        foreach (T childOfChild in FindVisualChildren<T>(child))  
                            yield return childOfChild;  

    I used this method in a foreach statement:

    foreach(var player in FindVisualChildren<MediaPlayerElement>(Gridview))  
    0 comments No comments

0 additional answers

Sort by: Most helpful