Windows 8 如何在点击列表项时触发其上的故事板,并在动画结束时通知页面?

Windows 8 如何在点击列表项时触发其上的故事板,并在动画结束时通知页面?,windows-8,windows-runtime,microsoft-metro,windows-store-apps,Windows 8,Windows Runtime,Microsoft Metro,Windows Store Apps,我正在将Windows Phone 8应用程序移植到Windows 8,我有一个场景,用户点击我的列表控件/网格视图中的一个项目,我想在该项目上播放“激活”动画,等待动画完成,然后离开页面 在Windows Phone上,我在一种情况下使用DataTriggers,在另一种情况下,我使用VisualTreeHelper在视图中迭代,找到VirtualzingStackPanel,然后找到实际项目,然后直接访问它以调用情节提要 在这种情况下两者都不起作用,而且似乎winrt()中不支持DataTr

我正在将Windows Phone 8应用程序移植到Windows 8,我有一个场景,用户点击我的列表控件/网格视图中的一个项目,我想在该项目上播放“激活”动画,等待动画完成,然后离开页面

在Windows Phone上,我在一种情况下使用DataTriggers,在另一种情况下,我使用VisualTreeHelper在视图中迭代,找到VirtualzingStackPanel,然后找到实际项目,然后直接访问它以调用情节提要

在这种情况下两者都不起作用,而且似乎winrt()中不支持DataTriggers

我想在这里做正确的事。我看到过一些关于可以使用可视状态的建议,但不清楚在这种情况下如何使用

非常感谢您的帮助


谢谢

我有两种方法可以做到这一点,尽管这两种方法都不是特别漂亮

方法A 创建一个充当每个GridView项的自定义控件,并将其放置在GridView的ItemTemplate中

<GridView>
    <GridView.ItemTemplate>
        <DataTemplate>
            <mynamespace:MyControl/>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>
并在自定义情节提要完成时启动它。承载GridView的页面可以附加到MyControl的自定义事件以执行导航

...
<mynamespace:MyControl SelectedAnimationComplete="selectedAnimationComplete"/>
...

获取GridViewItem,然后使用VisualTreeHelper.GetChild向下挖掘可视化树。在ItemTemplate中,根visual(可能是网格)可以将动画放置在其资源集合中。向下挖掘可视化树,直到找到ItemTemplate的根网格,从其资源集合中获取动画,将完成处理程序附加到它,然后运行它。您可以在完成处理程序中执行导航。

是!VisualTreeHelper就是答案。诀窍是为GridView查找VariableSizedWrapGrid,然后向下钻取它的每个子项以找到我的自定义控件。对于ListView(在快照模式下),我可以根据WindowsPhone8查找VirtualzingStackPanel。
...
<mynamespace:MyControl SelectedAnimationComplete="selectedAnimationComplete"/>
...
(sender as GridView).ItemContainerGenerator.ContainerFromItem(e.ClickedItem)