FadeIn和FadeOut主题动画只有一次,只有一种方式,为什么?

时间:2015-03-24 12:14:16

标签: c# xaml windows-phone-8.1 windows-8.1

有人可以帮我吗? 我试图做的是,在我的文本块上随机引用淡入淡出。 我试图使用名为" FadeInThemeAnimation"的东西。 问题是我不知道如何让它无休止地工作,所以我的随机引用会在设置完成后出现并消失。我已经在xaml中测试了十几个属性,看看会发生什么,但似乎我不知道该怎么做。目前,报价出现在文本块中(没有任何淡入效果)并慢慢消失,就是这样。请,我该如何使它工作。我已经粘贴了一大堆xaml代码。

<TextBlock x:Name="FamousQuoteTextBlock" Grid.Row="4" HorizontalAlignment="Stretch" Margin="5,5,5,5"
                   FontSize="15" TextAlignment="Justify" TextWrapping="Wrap" VerticalAlignment="Stretch" 
                   Loaded="FamousQuoteTextBlock_Loaded"
                   FontFamily="Edwardian Script ITC"
                   DataContext="{Binding quote}"
                   Text="{Binding RandomQuote,Mode=TwoWay}"
                   />
        <StackPanel>
                <StackPanel.Resources>
                <Storyboard x:Name="EnterStoryboard">
                    <FadeInThemeAnimation Storyboard.TargetName="FamousQuoteTextBlock"/>
                </Storyboard>
                <Storyboard x:Name="ExitStoryboard">
                    <FadeOutThemeAnimation Storyboard.TargetName="FamousQuoteTextBlock"/>
                </Storyboard>
            </StackPanel.Resources>
        </StackPanel>

我尝试过使用speedratio,duratio等等来看看会发生什么,但它没有任何区别:(

我的C#代码背后:

        private void FamousQuoteTextBlock_Loaded(object sender, RoutedEventArgs e)
        {

            Delay(sender, e);

        }

        private async void Delay(object sender, RoutedEventArgs e)
        {
            await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(3));

            generator_Tick(this, e);
            DispatcherTimer generator = new DispatcherTimer();
            generator.Tick += generator_Tick;
            generator.Interval = TimeSpan.FromSeconds(5);
            generator.Start();


        }


        private void generator_Tick(object sender, object e)
        {
            Quote quote = new Quote();
            FamousQuoteTextBlock.DataContext = quote;
            quote.GenerateQuote();

 }

1 个答案:

答案 0 :(得分:1)

您可以像这样创建自己的动画:

<TextBlock x:Name="QuoteTextBlock" Text="My Quote here">
    <TextBlock.Resources>
        <Storyboard x:Key="FadeStoryboard">
            <DoubleAnimation From="1" To="0.1" Storyboard.TargetProperty="Opacity" 
                                 Storyboard.TargetName="QuoteTextBlock" 
                                 RepeatBehavior="Forever" AutoReverse="True">
                <DoubleAnimation.EasingFunction>
                    <CubicEase/>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
    </TextBlock.Resources>
</TextBlock>

然后就这样开始:

var storyboard = QuoteTextBlock.Resources["FadeStoryboard"] as Storyboard;

if (storyboard != null)
{
    storyboard.Begin();
}

你正在寻找的小技巧是AutoReverse,这意味着在动画执行后,反向动画将跟进。如果与RepeatBehaviour="Forever"结合使用,则可能会达到您想要的效果。

我添加了Ease。您可以自定义缓动功能。这意味着动画步骤不会以线性方式执行,但在这种情况下将是 cubic

一些链接可以为您提供有关此事的更多详细信息:

MSDN : Quickstart - Animating your UI using XAML

MSDN : Storyboarded Animations