2012-08-08 11 views
5

Więc mam widok z przewijaniem, aby wyświetlić artykuł iw tym widoku klapki mam odtwarzacz mediów od Microsoft Player Framework. Teraz chcę mieć dostęp do tego odtwarzacza multimediów z kodu.WinRT XAML Znajdź sterowanie wewnątrz szablonu elementu FlipView Pozycja

Jednak każdy znaleziony przykład użył FindName na DataTemplate, którego nie widział WinRT.

Próbowałem

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

a następnie za pomocą VisualTreeHelper znaleźć Media Player ale flipViewItem zawsze ma wartość null.

Próbowałem powiązania danych z odtwarzaczem wideo - ale powoduje to jednoczesne odtwarzanie wszystkich filmów w widoku klapki.

Czy ktoś może pomóc?

EDIT

Więc to jest mój XAML, że używam:

<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> 

Próbowałem wiążący do odtwarzacza multimedialnego:

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

jednak, gdy to zrobić i ustaw wideo na autoodtwarzanie - wszystkie są autoodtwarzane. Jeśli ręcznie naciśnij przycisk odtwarzania na formancie, otrzymuję wyjątek odwołania zerowy w System.ComponentModel.PropertyChangedEventHandler.Invoke. Odtwarzacz multimedialny działa dobrze poza szablonem.

To, co jest mylące, polega na tym, że wiem, że to, co chcę, jest możliwe. Aplikacja SkyNews dla systemu Windows 8 wykonuje dokładnie to, co chcę zrobić (dodaj wideo do szablonu elementu widoku z odwracaniem). Spojrzałem na c: \ ProgramFiles \ WindowsApps, więc zobacz, jak wyglądały ich xaml, ponieważ jest prawie taki sam jak mój - bez powiązania danych z odtwarzaczem multimediów. Jedyna różnica polega na tym, że mają x: ConnectionId na usercontrol i siatkę zawierającą odtwarzacz wideo w szablonie. Nie wiem, co robi x: ConnectionId - ale czy to możliwe, że ktoś używa tego do uzyskania dostępu do kontrolek z ich kodu?

+0

Czy próbowałeś uczynić go zasobem, a następnie za pomocą 'FrameworkElement.FindResource'? – mydogisbox

+0

Jeśli przeniesię MediaPlayer do '' jak umieścić go we właściwej pozycji na mojej stronie? – Terry

+0

Ah, przepraszam. Źle zrozumiałem, czym był ten komponent. – mydogisbox

Odpowiedz

2

Zapoznaj się z http://winrtxamltoolkit.codeplex.com/downloads/get/467926 i zobacz rozszerzenia VisualTreeHelperExtensions.

Nie ma bezpośredniej metody na znalezienie elementu w drzewie wizualnym. Musisz użyć metody VisualTreeHelper.GetChild (flipView, i). Nie jest trudny do wdrożenia, ale Toolkit ma plik klasy metod pojedynczego rozszerzenia, który można dodać bezpośrednio do projektu. Zapewnia sposób na uzyskanie potomków lub przodków według typu. Myślę, że będzie pasował do rachunku za to, czego szukasz.

+1

Jeśli otrzymasz potomka według typu, zwróci on wszystkie wystąpienia MediaPlayer. Skąd wiesz, który z nich znajduje się w bieżącym widoku FlipView? – xster

+0

FlipView powinien mieć właściwość "aktualnie aktywny element", który można następnie przekazać do VisualHelper.FindChild

Powiązane problemy