WPF故事板作为资源

时间:2013-04-11 07:56:35

标签: c# wpf animation storyboard

我真的是WPF动画的初学者,我真的迷失了名字空间的东西..我试图淡出淡出一个标签,它似乎从我的代码的某些部分起作用而不是从其他部分起作用。在这里总结我的代码,让我们看看你在那里找到了什么:)

所以,对于xaml我有:

<Page x:Class=""Gtec2.MindBeagle.ChoosePatient"   .. .bla bla bla>
    <Page.Resources>
        <Resources Dictionary>
            <Storyboard x:Key="fadeInStory" Storyboard.TargetName="noPatientsLabel" Storyboard.TargetProperty="Opacity">
                <DoubleAnimation From="1" To="0" Duration="0:0:0.300"/>
            </Storyboard>
            <!-- Other resources as imagesources, styles and stuff -->
        </Resources Dictionary>
     </Page.Resources>
     <Grid>
         <!-- A lot of things -->
         <!-- And the guy I want to fadeIn and Out-->
         <TextBlock Name="noPatientsLabel" TextAlignment="Center" VerticalAlignment="Center" Grid.Column="1" Grid.Row="1" IsHitTestVisible="False">
        No Patients found <LineBreak/>
        please check the filters
         </TextBlock>
         <!-- A lot of things -->
     </Grid>
</Page>

对于背后的代码(C#),我有很多东西和类似的方法:

public void FadeIn()
{
    Storyboard sb = FindResource("fadeInStory") as Storyboard;
    sb.Begin();
}

IT似乎是在同一个cs文件中工作,但是当其他人调用此方法使标签出现时,它抱怨说''noPatientsLabel'名称在'Gtec2.MindBeagle.ChoosePatient'的名称范围内找不到。 “

如果尝试过其他方法..就像在代码中创建整个故事板一样。实际上比较冷,因为我创建了一个函数来淡化IN / Out你发送给他作为参数的任何组件..但没有任何效果..

任何线索?顺便说一句..关于所有这些的任何好手册??

先谢谢你们!!

1 个答案:

答案 0 :(得分:0)

我最终创建了一个名为AnimationHelper的静态类,其中包含一些有用的函数。这里有一个例子

public static void FadeOut(UIElement target, int milliseconds)
    {
       DoubleAnimation da = new DoubleAnimation();
       da.From = target.Opacity;
       da.To = 0.0;
       da.Duration = TimeSpan.FromMilliseconds(milliseconds);
       da.AutoReverse = false;

       System.Windows.Media.Animation.Storyboard.SetTargetProperty(da, new PropertyPath("Opacity"));
       System.Windows.Media.Animation.Storyboard.SetTarget(da, target);

       System.Windows.Media.Animation.Storyboard sb = new System.Windows.Media.Animation.Storyboard();
       sb.Children.Add(da);

       sb.Begin();
   }
同样适合淡入或等等。您还可以返回故事板(公共静态System.Windows.Media.Animation.Storyboard FadeIn (UIElement target) { ... }

如果您这样做,您可以附加到已完成的事件:)

极其有用:)