4

したがって、記事を表示するためのフリップビューがあり、このフリップビューには、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が何をするのかわかりませんが、コードからコントロールにアクセスするためにそれを使用している人である可能性はありますか?

4

2 に答える 2

2

http://winrtxamltoolkit.codeplex.com/downloads/get/467926をチェックして、VisualTreeHelperExtensionsを確認してください。

ビジュアルツリーで要素を見つける直接的な方法はありません。VisualTreeHelper.GetChild(flipView、i)メソッドを使用する必要があります。実装は難しくありませんが、Toolkitには、プロジェクトに直接追加できる単一の拡張メソッドクラスファイルがあります。タイプごとに子孫または祖先を取得する方法を提供します。私はそれがあなたが探しているもののための法案に合うと思います。

于 2012-08-14T21:18:38.963 に答える
0

もちろん。テンプレート内の名前付きコントロールにアクセスする場合は、こちらを参照してくださいhttp://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html

于 2012-10-18T16:04:42.180 に答える