2012-08-08 13 views
5

Tengo una vista invertida para mostrar un artículo y en esta vista general tengo un Reproductor multimedia del Microsoft Player Framework. Ahora quiero poder acceder a este reproductor multimedia desde el código.WinRT XAML Buscar control dentro de FlipView Plantilla de artículo

Sin embargo, todos los ejemplos que he encontrado han utilizado FindName en DataTemplate que WinRT no tiene.

He tratado

var flipViewItem = this.flipView.ItemContainerGenerator.ContainerFromIndex(flipView.SelectedIndex); 

y luego usar el VisualTreeHelper para encontrar el reproductor de medios, pero flipViewItem siempre es nula.

Intenté el enlace de datos del reproductor de video, pero esto hace que todos los videos en los elementos de la vista invertida se reproduzcan simultáneamente.

¿Alguien puede ayudarnos?

EDITAR

Así que este es mi xaml que estoy usando:

<FlipView 
     x:Name="flipView" 
     AutomationProperties.AutomationId="ItemsFlipView" 
     AutomationProperties.Name="Item Details" 
     TabIndex="1" 
     Margin="0,127,0,10" 
     ItemsSource="{Binding Source={StaticResource itemsViewSource}}" Grid.RowSpan="2"> 

     <FlipView.ItemTemplate> 
      <DataTemplate> 
       <UserControl Loaded="StartLayoutUpdates" Unloaded="StopLayoutUpdates"> 
        <ScrollViewer x:Name="scrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" Grid.Row="1"> 

         <common:RichTextColumns x:Name="richTextColumns" Margin="117,0,117,47"> 
          <RichTextBlock x:Name="richTextBlock" Width="560" Style="{StaticResource ItemRichTextStyle}"> 
           <Paragraph> 
            <Run FontSize="26.667" FontWeight="Light" Text="{Binding Title}"/> 
           </Paragraph> 
           <Paragraph LineStackingStrategy="MaxHeight"> 
            <InlineUIContainer> 
             <Grid Width="560" Height="340" Margin="0,20,0,10"> 
              <Grid.Background> 
               <ImageBrush ImageSource="{Binding Image}" Stretch="UniformToFill" /> 
              </Grid.Background> 
              <Image x:Name="OverlayImage" Visibility="{Binding ShowVideo, Converter={StaticResource booleanToVisibilityConverter}}" Source="Assets/play-icon.png"/> 
              <mmppf:MediaPlayer x:Name="ArticleVideo" Width="560" Height="340" /> 
             </Grid> 
            </InlineUIContainer> 

He tratado de unión con el reproductor de medios:

<mmppf:MediaPlayer x:Name="ArticleVideo" Source="{Binding VideoPath}" Width="560" Height="340" PosterSource="{Binding Image}" AutoPlay="False" /> 

Sin embargo, cuando hago eso y configura los videos para que se reproduzcan automáticamente; todos se reproducen automáticamente. Si presiono jugar de forma manual en el control, recibo una excepción de referencia nula en System.ComponentModel.PropertyChangedEventHandler.Invoke. El reproductor multimedia funciona bien fuera de la plantilla.

Lo que es confuso, es que sé que lo que quiero es posible. La aplicación SkyNews para Windows 8 hace exactamente lo que quiero hacer (agregar un video a una plantilla de elemento de vista invertida). Eché un vistazo a c: \ ProgramFiles \ WindowsApps, así que veré cómo era su xaml en casi el mismo aspecto que el mío, sin vinculación de datos en el reproductor de medios. La única diferencia es que tienen x: ConnectionId en el control de usuario y la cuadrícula que contiene el reproductor de video en la plantilla. No sé qué es x: ConnectionId sí, pero ¿es posible que alguien lo esté usando para acceder a los controles desde su código?

+0

¿Ha intentado convertirlo en un recurso y luego usar 'FrameworkElement.FindResource'? – mydogisbox

+0

Si muevo el MediaPlayer a '' ¿cómo puedo colocarlo en la posición correcta en mi página? – Terry

+0

Ah, lo siento. No entendí cuál era el componente. – mydogisbox

Respuesta

2

Consulte http://winrtxamltoolkit.codeplex.com/downloads/get/467926 y mire en VisualTreeHelperExtensions.

No hay un método directo para encontrar un elemento en el árbol visual. Necesitas usar el método VisualTreeHelper.GetChild (flipView, i). No es difícil de implementar, pero Toolkit tiene un solo archivo de clase de método de extensión que puede agregar directamente a su proyecto. Proporciona una forma de obtener descendientes o antepasados ​​por tipo. Creo que se ajustará a la factura de lo que estás buscando.

+1

Si obtiene los descendientes por tipo, devolverá todas las instancias del MediaPlayer. ¿Cómo sabe cuál es la vista FlipView actual? – xster

+0

FlipView debe tener la propiedad "elemento activo actualmente", que puede pasar a VisualHelper.FindChild

Cuestiones relacionadas