2012-08-08 48 views
5

因此,我有翻轉視圖來顯示文章,並在此翻轉視圖中,我有一個來自Microsoft Player Framework的媒體播放器。現在我想從代碼中訪問這個媒體播放器。WinRT XAML在FlipView內部查找控制項目模板

但是,我發現的每個示例都使用了WinRT沒有看到的DataTemplate上的FindName。

我已經試過

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

,然後使用VisualTreeHelper找到媒體播放器,但flipViewItem總是空。

我試過數據綁定視頻播放器 - 但這會導致翻轉視圖項目中的所有視頻同時播放。

有人可以幫忙嗎?

編輯

所以這是我的XAML我使用:

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

我曾嘗試結合到媒體播放器:

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

然而,當我這樣做並設置視頻自動播放 - 他們都自動播放。如果我手動按下播放控件上,我收到System.ComponentModel.PropertyChangedEventHandler.Invoke空引用異常。媒體播放器可以在模板外正常工作。

什麼令人困惑,是我知道我想要什麼是可能的。適用於Windows 8的SkyNews應用程序正是我想要做的(將視頻添加到翻轉視圖項目模板)。我看了一下c:\ ProgramFiles \ WindowsApps,看看它的xaml看起來與我的幾乎一樣 - 沒有數據綁定在媒體播放器上。唯一的區別是它們在用戶控件上具有x:ConnectionId,並且在模板中包含視頻播放器。我不知道x:ConnectionId是幹什麼的 - 但是有可能他們是使用它從代碼中訪問控件的人嗎?

+0

你試過把它作爲資源,然後使用'FrameworkElement.FindResource'? – mydogisbox 2012-08-08 19:21:44

+0

如果我將MediaPlayer移動到「」中,那麼我怎樣才能將它放在我的頁面的正確位置上? – Terry 2012-08-08 20:22:52

+0

啊,對不起。我誤解了組件是什麼。 – mydogisbox 2012-08-08 20:37:42

回答

2

查看http://winrtxamltoolkit.codeplex.com/downloads/get/467926並查看VisualTreeHelperExtensions。

沒有直接的方法在視覺樹中找到元素。您需要使用VisualTreeHelper.GetChild(flipView,i)方法。不難實現,但工具包有一個擴展方法類文件,您可以直接將其添加到項目中。它提供了一種按類型獲取後代或祖先的方法。我認爲這將符合你要找的東西。

+1

如果按類型獲取後代,它將返回MediaPlayer的所有實例。那麼您如何知道當前FlipView視圖中的哪一個? – xster 2012-10-04 01:13:05

+0

FlipView應具有「當前活動項目」屬性,您可以將其傳遞給VisualHelper.FindChild 2013-03-23 07:34:26