我将Windows Phone 8应用程序移植到Windows 8,我有一个场景,用户点击我的列表控件/网格视图中的项目,我想要播放"激活"项目上的动画,等待动画完成,然后离开页面。
在Windows Phone上,我在一种情况下使用了DataTriggers,在另一种情况下,我使用VisualTreeHelper迭代视图并找到VirtualizingStackPanel,然后查找实际项目,然后直接访问它以调用故事板......
在这种情况下似乎都不起作用,似乎winrt(DataTrigger in WinRT?)也不支持DataTriggers。
我想在这里做正确的事。我已经看到了可以使用视觉状态的建议,但在这种情况下还不清楚。
任何帮助都非常感激。
由于
答案 0 :(得分:1)
我有两种方法可以解决这个问题,但两种方式都不是特别漂亮。
创建一个自定义控件,它将作为每个GridView项目并将其放在GridView的ItemTemplate中。
<GridView>
<GridView.ItemTemplate>
<DataTemplate>
<mynamespace:MyControl/>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
然后,在MyControl的构造函数中,将一个处理程序附加到Tapped事件,并在该处理程序中执行动画。可以在MyControl.xaml中定义动画。 MyControl还应该在动画完成时公开事件
public event EventHandler SelectedAnimationComplete;
并在您的自定义故事板完成时触发它。托管GridView的页面可以附加到MyControl的自定义事件以执行导航。
...
<mynamespace:MyControl SelectedAnimationComplete="selectedAnimationComplete"/>
...
在GridView上,将SelectionMode设置为None,将IsItemClickEnabled设置为true,并将处理程序附加到ItemClick事件。在处理程序内部,您可以使用
(sender as GridView).ItemContainerGenerator.ContainerFromItem(e.ClickedItem)
获取GridViewItem,然后使用VisualTreeHelper.GetChild挖掘可视化树。在ItemTemplate中,根视觉(可能是网格)可以将动画放在其资源集合中。挖掘可视树,直到找到ItemTemplate的根网格,从其Resources集合中获取动画,将完成处理程序附加到它,然后运行它。您可以在完成处理程序中执行导航。