如何在stackpanel下的XAML GridView中定义的C#后面的代码中调用Storyboard.begin()

时间:2016-09-28 23:36:13

标签: c# windows xaml animation uwp

我正在尝试在XAML中的stackpanel下的gridview中显示的图像数量中为一个图像设置动画。当我尝试在Storyboard.beging()中呼叫Gridview.itemclick()时,会抛出以下异常。

An exception of type 'System.Runtime.InteropServices.COMException'
occurred in mscorlib.ni.dll but was not handled in user code WinRT
information: Cannot find a resource with the given key.

xml代码:

                <GridView Grid.Row="1" Name="SoundGridView"
                          SelectionMode="None" IsItemClickEnabled="True"

                          ItemsSource="{x:Bind sounds}"
                          ItemClick="SoundGridView_ItemClick">

                   <GridView.ItemTemplate>
                    <DataTemplate x:DataType="data:Sound">

               <StackPanel Orientation="Vertical" Name="StkPnl1">
                <StackPanel.Resources>

                <Storyboard x:Key="ImageStoryboard">
                 <DoubleAnimation AutoReverse="True" Duration="0:0:2"
                  From="1" To="1.5" Storyboard.TargetProperty="ScaleX"   
                       Storyboard.TargetName="ScaleImage" />

             <DoubleAnimation AutoReverse="True" Duration="0:0:2" From="1" 
                To="1.5" Storyboard.TargetProperty="ScaleY" 
               Storyboard.TargetName="ScaleImage" />
             </Storyboard>
            </StackPanel.Resources>

          <StackPanel.Transform3D>
            <PerspectiveTransform3D />
          </StackPanel.Transform3D>
        <Image Name="MyImage" Source="{x:Bind ImageFile}" Height="100" Width="100" RenderTransformOrigin="0.6, 0.6" >                                               
           <Image.RenderTransform>
             <ScaleTransform x:Name="ScaleImage"/>
           </Image.RenderTransform>
         </Image>
        </StackPanel>
        </DataTemplate>                          
        </GridView.ItemTemplate>

                </GridView>
              </Grid>

c#c​​ode:

    private void SoundGridView_ItemClick(object sender, ItemClickEventArgs e)
    {              
     Storyboard sb = ((GridView)sender).Resources["ImageStoryboard"] as 
      Storyboard;
        sb.Begin();         

    }

1 个答案:

答案 0 :(得分:0)

错误消息很明确但由于您没有发布任何代码,因此我不知道该异常可以在何处投放。这是我的演示:

<GridView x:Name="gridView" IsItemClickEnabled="True" ItemClick="gridView_ItemClick">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.Resources>
                    <Storyboard x:Name="std" x:Key="std">
                        <DoubleAnimation Storyboard.TargetName="rtt" Storyboard.TargetProperty="Angle"
                         Duration="0:0:3" From="0" To="360" />
                    </Storyboard>
                </Grid.Resources>
                <Image Source="{Binding ImageAddress}" Width="200" Height="200">
                    <Image.RenderTransform>
                        <RotateTransform x:Name="rtt" CenterX="100" CenterY="100" />
                    </Image.RenderTransform>
                </Image>
            </Grid>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

然后在gridView_ItemClick事件中:

private void gridView_ItemClick(object sender, ItemClickEventArgs e)
{
    var item = gridView.ContainerFromItem(e.ClickedItem) as GridViewItem;
    var grid = item.ContentTemplateRoot as Grid;
    var std = grid.Resources["std"] as Storyboard;
    std.Begin();
}

以下是此故事板的渲染图像: enter image description here