Metro将FadeInAnimation附加到图像

时间:2013-08-09 22:21:03

标签: xaml microsoft-metro

我有以下应该有效:

XAML

<Window.Resources>
    <Storyboard x:Name="FadeInStoryboard1">
        <FadeInThemeAnimation Storyboard.TargetName="Image1" />
    </Storyboard>
    <Storyboard x:Name="FadeInStoryboard2">
        <FadeInThemeAnimation Storyboard.TargetName="Image2" />
    </Storyboard>
    <Storyboard x:Name="FadeInStoryboard3">
        <FadeInThemeAnimation Storyboard.TargetName="Image3" />
    </Storyboard>
    <Storyboard x:Name="FadeInStoryboard4">
        <FadeInThemeAnimation Storyboard.TargetName="Image4" />
    </Storyboard>
    <Storyboard x:Name="FadeInStoryboard5">
        <FadeInThemeAnimation Storyboard.TargetName="Image5" />
    </Storyboard>
</Window.Resources>
<Image Source="../Assets/image.png" x:Name="Image1" />
<Image Source="../Assets/image.png" x:Name="Image2" />
<Image Source="../Assets/image.png" x:Name="Image3" />
<Image Source="../Assets/image.png" x:Name="Image4" />
<Image Source="../Assets/image.png" x:Name="Image5" />

C#

//fades in the plane image 
private void FadeIn(int Index)
{
    if (Index == 0)
        FadeInStoryboard1.Begin();
    else if (Index == 1)
        FadeInStoryboard2.Begin();
    else if (Index == 2)
        FadeInStoryboard3.Begin();
    else if (Index == 3)
        FadeInStoryboard4.Begin();
    else
        FadeInStoryboard5.Begin();
}

以上代码有效 - 但必须有更好的方法。有没有办法(A)将Storyboard对象放入我可以通过索引访问的列表中,或者(B)将Storyboard对象附加到作为其目标的Image对象?

1 个答案:

答案 0 :(得分:1)

是在迭代资源并检查其名称是一个选项吗?

string name = "FadeInStoryboard" + index;
foreach (object resource in this.Resources)
{
    if (resource is System.Windows.Media.Animation.Storyboard)
    {
        System.Windows.Media.Animation.Storyboard storyboard = (System.Windows.Media.Animation.Storyboard)resource;
        if (storyboard.Name == name) storyboard.Begin();

    }
  }

如果你在Keys中有一个模式,那么你可能会使用

this.Resources.FindByName("MyKey"+index)