首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinRT XAML在FlipView项模板中查找控件

WinRT XAML在FlipView项模板中查找控件
EN

Stack Overflow用户
提问于 2012-08-08 18:17:15
回答 2查看 8.5K关注 0票数 4

所以我有一个翻转视图来显示一篇文章,在这个翻转视图中,我有一个来自Microsoft框架的媒体播放器。现在我希望能够从代码中访问这个媒体播放器。

但是,我发现的每一个示例都在DataTemplate上使用了WinRT未见过的DataTemplate。

我试过了

代码语言:javascript
复制
var flipViewItem = this.flipView.ItemContainerGenerator.ContainerFromIndex(flipView.SelectedIndex);

然后使用VisualTreeHelper查找Media,但flipViewItem始终为null。

我尝试了数据绑定视频播放器-但这会导致翻转视图项目中的所有视频同时播放。

有人能帮忙吗?

编辑

这是我正在使用的xaml:

代码语言:javascript
复制
<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>

我试过绑定到媒体播放器:

代码语言:javascript
复制
<mmppf:MediaPlayer x:Name="ArticleVideo" Source="{Binding VideoPath}" Width="560" Height="340" PosterSource="{Binding Image}" AutoPlay="False" />

然而,当我这样做,并将视频设置为自动播放-他们都自动播放。如果手动按下控件上的play,则在System.ComponentModel.PropertyChangedEventHandler.Invoke.上会收到空引用异常。媒体播放器在模板外工作良好。

令人困惑的是,我知道我想要什么是可能的。windows 8的SkyNews应用程序完成了我想做的事情(将视频添加到翻转视图项模板中)。我看了一下c:\ProgramFiles\WindowsApps,看看他们的xaml是什么样子的--和我的差不多--媒体播放器上没有数据绑定。唯一的区别是它们在用户控件上有x:ConnectionId,而在模板中包含视频播放器的网格。我不知道x:ConnectionId能做什么--但是他们是否有可能使用它从代码中访问控件呢?

EN

回答 2

Stack Overflow用户

发布于 2012-08-14 21:18:38

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

在可视化树中没有找到元素的直接方法。您需要使用VisualTreeHelper.GetChild(flipView,i)方法。实现起来并不难,但Toolkit只有一个扩展方法类文件,可以直接添加到项目中。它提供了一种按类型获取后代或祖先的方法。我想它符合你要找的东西。

票数 2
EN

Stack Overflow用户

发布于 2012-10-18 16:04:42

好的。如果要访问模板中的命名控件,请参阅此处http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11870676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档