0

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

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

在这种情况下,两者似乎都不起作用,并且似乎在 winrt 中不支持 DataTriggers(WinRT 中的 DataTrigger?)。

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

非常感谢任何帮助。

谢谢

4

1 回答 1

1

我有两种方法可以解决这个问题,但都不是特别漂亮。

方法A

创建一个将充当每个 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"/>
...

方法B

在 GridView 上,将 SelectionMode 设置为 None,将 IsItemClickEnabled 设置为 true,并将处理程序附加到 ItemClick 事件。在处理程序内部,您可以使用

(sender as GridView).ItemContainerGenerator.ContainerFromItem(e.ClickedItem)

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

于 2013-05-01T00:32:17.180 回答