したがって、記事を表示するためのフリップビューがあり、このフリップビューには、MicrosoftPlayerFrameworkのメディアプレーヤーがあります。ここで、コードからこのメディアプレーヤーにアクセスできるようにしたいと思います。
ただし、私が見つけたすべての例では、WinRTにはないDataTemplateでFindNameを使用しています。
私が試してみました
var flipViewItem = this.flipView.ItemContainerGenerator.ContainerFromIndex(flipView.SelectedIndex);
次に、VisualTreeHelperを使用してメディアプレーヤーを検索しますが、flipViewItem
常にnullです。
ビデオプレーヤーをデータバインディングしようとしましたが、これにより、フリップビューアイテムのすべてのビデオが同時に再生されます。
誰か助けてもらえますか?
編集
これが私が使用している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でnull参照例外が発生します。メディアプレーヤーは、テンプレートの外部で正常に動作します。
紛らわしいのは、自分がやりたいことが可能であることを知っているということです。Windows 8用のSkyNewsアプリは、私がやりたいことを正確に実行します(フリップビューアイテムテンプレートにビデオを追加します)。c:\ ProgramFiles \ WindowsAppsを調べたので、xamlがどのように見えるかを確認します。これは、メディアプレーヤーにデータバインディングがないため、私のものとほぼ同じです。唯一の違いは、ユーザーコントロールにx:ConnectionIdがあり、テンプレートにビデオプレーヤーを含むグリッドがあることです。x:ConnectionIdが何をするのかわかりませんが、コードからコントロールにアクセスするためにそれを使用している人である可能性はありますか?