访问StoryView DataTemplate中定义的StoryBoard,用于GridViewItem的特定实例

时间:2017-07-21 11:03:14

标签: c# xaml binding uwp storyboard

好的,我有一个带有DataTemplate的GridView,并且ItemSource设置为Binding。 GridView完全填充,我没有问题。

我的问题如下

  1. 用户点击DataTemplate内的图片
  2. 显示一个弹出窗口,显示GridView项目(作品)的简单ListView
  3. 用户点击弹出窗口内的ListView项目
  4. 然后更新与ListView项匹配的GridView项(工作正常)
  5. 应该启动一个StoryBoard(不起作用)
  6. 这个想法是一个玩家攻击了另一个玩家,我希望在受攻击的玩家上启动动画,但我只能使用(发送者)访问攻击玩家。

    故事板是在GridViewItem DataTemplate中定义的,如果GridViewItem是通过使用发送者来点击的话我可以访问它.Finds()但是我不能使用这个我想在没有&#t; t的GridViewItem上启动故事板被窃听了。

    我有一个想法,也许故事板可以写在用于GridViewItem绑定的类中?怎么会这样呢?

    或者也许使用DataTrigger,但是当我想要检查的值是和减少int时,可以使用它吗?

2 个答案:

答案 0 :(得分:0)

使用.Resources["MyStoryboard"] as Storyboard获取Storyboard内定义的DataTemplate。另外,使用ContainerFromIndex从索引中获取项目。

这是一个代码示例

在XAML中

<DataTemplate>
    <Grid Name="MyGrid">
        <Grid.Resources>
            <Storyboard x:Name="MyStoryboard"/>
        </Grid.Resources>
        ....
    </Grid>
</DataTemplate>

在代码背后

private void StartStoryboard(int index)
{
    var MyGridViewItem = MyGridView.ContainerFromIndex(index);
    Storyboard MyStoryboard = MyGridViewItem.Resources["MyStoryboard"] as Storyboard;
    MyStoryboard.Begin();
}

现在,您可以随时使用StartStoryboard(index)启动Storyboard

答案 1 :(得分:0)

How do I access a control inside a XAML DataTemplate?

上面的链接谈到了类似的问题,使用FindControl函数工作了一个魅力