简体   繁体   English

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

[英]How to call Storyboard.begin() in code behind C# defined in XAML GridView under stackpanel

I am trying to animate one Image from numbers of images displayed in gridview under stackpanel in XAML. 我试图在XAML中的stackpanel下的gridview中显示的图像数量中为一个图像设置动画。 When I am trying to call Storyboard.beging() in Gridview.itemclick() , its throwing the following exception. 当我试图在Gridview.itemclick()调用Storyboard.beging()时,它抛出以下异常。

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 code: 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# code: c#代码:

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

    }

The error message was clear but since you didn't post any code, I don't know where can this exception be threw. 错误消息很明确,但由于您没有发布任何代码,我不知道在哪里可以抛出此异常。 Here is my demo: 这是我的演示:

<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>

Then in the gridView_ItemClick event: 然后在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();
}

Here is the rendering image of this storyboard: 这是这个故事板的渲染图像: 在此输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM