FadeIn 和 FadeOut 主题动画只工作一次,而且只有一种方式,为什么?
FadeIn and FadeOut Theme Animation works only once and only one way,why?
有人可以帮助我吗?
我想要做的是,在我的文本块上随机引述淡入淡出。
我正在尝试使用一种叫做 "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();
}
您可以像这样创建自己的动画:
<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
。您可以自定义缓动函数很多。这意味着动画步骤不会以 linear 方式执行,但在这种情况下将是 cubic.
一些链接可以为您提供有关此事的更多详细信息:
有人可以帮助我吗? 我想要做的是,在我的文本块上随机引述淡入淡出。 我正在尝试使用一种叫做 "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();
}
您可以像这样创建自己的动画:
<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
。您可以自定义缓动函数很多。这意味着动画步骤不会以 linear 方式执行,但在这种情况下将是 cubic.
一些链接可以为您提供有关此事的更多详细信息: