2012-08-08 9 views
5

Così ho una vista a fogli mobili per visualizzare un articolo e in questa vista a fogli mobili ho un lettore multimediale da Microsoft Player Framework. Ora voglio essere in grado di accedere a questo lettore multimediale dal codice.WinRT XAML Trova il controllo all'interno del modello FlipView Item

Tuttavia, ogni singolo esempio che ho trovato ha utilizzato FindName nel DataTemplate che WinRT non sembra avere.

ho cercato

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

e quindi utilizzando il VisualTreeHelper per trovare il Media Player, ma flipViewItem è sempre nullo.

Ho provato i dati che legano il lettore video - ma questo fa sì che tutti i video negli elementi della vista a fogli mobili vengano riprodotti simultaneamente.

Qualcuno può aiutare?

EDIT

Quindi questo è il mio XAML che sto 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> 

ho cercato di legame al lettore multimediale:

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

Tuttavia, quando faccio questo e imposta i video per la riproduzione automatica - sono tutti in automatico. Se premo manualmente play sul controllo, ricevo un'eccezione di riferimento null su System.ComponentModel.PropertyChangedEventHandler.Invoke. Il lettore multimediale funziona bene al di fuori del modello.

Ciò che è confuso, è che so che cosa voglio è possibile. L'app SkyNews per Windows 8 fa esattamente ciò che voglio fare (aggiungi un video a un modello di oggetto vista flip). Ho dato uno sguardo a c: \ ProgramFiles \ WindowsApps, quindi guarda come è apparso il loro xaml è quasi uguale al mio - senza alcuna associazione di dati sul media player. L'unica differenza è che hanno x: ConnectionId sull'usercontrol e la griglia contenente il video player nel modello. Non so cosa x: ConnectionId fa - ma è possibile che qualcuno lo usi per accedere ai controlli dal loro codice?

+0

Hai provato a renderlo una risorsa e quindi a utilizzare "FrameworkElement.FindResource'? – mydogisbox

+0

Se si sposta MediaPlayer in '' come posso quindi posizionarlo nella posizione corretta sulla mia pagina? – Terry

+0

Ah, mi dispiace. Ho frainteso quello che era il componente. – mydogisbox

risposta

2

Controlla http://winrtxamltoolkit.codeplex.com/downloads/get/467926 e guarda le VisualTreeHelperExtensions.

Non esiste un metodo diretto per trovare un elemento nell'albero visivo. È necessario utilizzare il metodo VisualTreeHelper.GetChild (flipView, i). Non è difficile da implementare, ma il Toolkit ha un singolo file di classe del metodo di estensione che puoi aggiungere direttamente al tuo progetto. Fornisce un modo per ottenere discendenti o antenati per tipo. Penso che si adatterà al conto per quello che stai cercando.

+1

Se si ottengono i discendenti per tipo, verranno restituite tutte le istanze di MediaPlayer. Come si fa a sapere quale si trova nella vista FlipView corrente? – xster

+0

FlipView dovrebbe avere la proprietà "elemento attualmente attivo", che è possibile passare a VisualHelper.FindChild

Problemi correlati