用颜色淡出动画,用标签突出显示屏幕上的更改

本文关键字:屏幕 显示屏 显示 淡出 颜色 动画 标签 | 更新日期: 2023-09-27 18:18:52

我是这个领域的新手。我在屏幕上动态地创建控件。在按钮上单击我正在更改标签值。我想添加一些带颜色的淡出动画以便捕捉用户的视图以便指示屏幕上发生了什么。目前我用这个来隐藏控件的淡出动画

myLabel.Visibility = System.Windows.Visibility.Visible;
        var a = new DoubleAnimation
        {
            From = 1.0,
            To = 0.0,
            FillBehavior = FillBehavior.Stop,
            BeginTime = TimeSpan.FromSeconds(2),
            Duration = new Duration(TimeSpan.FromSeconds(0.5))
        };
        var storyboard = new Storyboard();
        storyboard.Children.Add(a);
        Storyboard.SetTarget(a, myLabel);
        Storyboard.SetTargetProperty(a, new PropertyPath(OpacityProperty));
        storyboard.Completed += delegate { myLabel.Visibility = System.Windows.Visibility.Hidden; };
        storyboard.Begin();  

相反,我必须使用一些黄色的颜色框作为背景,它会逐渐淡出,以指示屏幕上发生的事情。如有任何帮助,我将不胜感激

用颜色淡出动画,用标签突出显示屏幕上的更改

关于没有xaml方法的Storyboard的问题看起来不太好。

所以这里有一个替代做相同的从xaml:

张贴的答案

首先在xaml Resources中创建Storyboard并分配Key

<Storyboard x:Key="MyStoryboard">
  <ColorAnimation BeginTime="0:0:0"
                  Duration="0:0:2"
                  Storyboard.TargetProperty="(Label.Foreground).(SolidColorBrush.Color)"
                  To="Yellow" />
  <ColorAnimation BeginTime="0:0:2"
                  Duration="0:0:3"
                  Storyboard.TargetProperty="(Label.Foreground).(SolidColorBrush.Color)"
                  To="Transparent" />
</Storyboard>

接下来,因为您想从动态Label的代码后面调用它,您可以在代码后面执行以下操作,以在动态添加的Label上调用它:

var myStoryboard = (Storyboard)TryFindResource("MyStoryboard"); 
foreach(var animation in myStoryboard.Children)
  Storyboard.SetTarget(animation, /* WhateverDynamicLabelControl */);
myStoryboard.Begin();

你可以从这里得到它的工作演示。如果你可以避免代码隐藏调用Storyboard,然后去做,但我不确定你的视图是如何设置的

更新:

要从多个视图访问相同的Storyboard

  • Storyboard移动到两个视图都可以访问的更高的资源范围(例如在app.xaml中)
  • Storyboard放入ResourceDictionary中,并将此字典合并到您需要故事板的视图中。

对于这两种方法,请确保在Storyboard上指定x:Shared="False",以防止只读修改错误。

所以不用

<Storyboard x:Key="MyStoryboard">

你将有

<Storyboard x:Key="MyStoryboard" x:Shared="False">

我已经使用了下面的逻辑淡出/淡出,我知道这不是一个最好的答案,但它绝对适合我按照我的要求。我使用ColorAnimation作为

ColorAnimation animation = new ColorAnimation();
animation.To = Colors.Yellow;
animation.Duration = new Duration(TimeSpan.FromSeconds(2));
SolidColorBrush brush = new SolidColorBrush();
animation.Completed += delegate { resetAnimation(element); };
brush.BeginAnimation(SolidColorBrush.ColorProperty, animation);
element.Background = brush;
我已经将背景色从黄色重置为透明色
ColorAnimation animation = new ColorAnimation();
animation.From = Colors.Yellow;
animation.To = Colors.Transparent;
animation.Duration = new Duration(TimeSpan.FromSeconds(3));
SolidColorBrush brush = new SolidColorBrush();
brush.BeginAnimation(SolidColorBrush.ColorProperty, animation);
element.Background = brush;

在任何方法中使用这两个逻辑并将元素作为参数传递。这是它

你应该将DoubleAnimation更改为ColorAnimation:

ColorAnimation colorAnimation = new ColorAnimation();
colorAnimation.To = Colors.Yellow;
colorAnimation.Duration = TimeSpan.FromSeconds(1);

改变这一行:

Storyboard.SetTarget(a, myLabel);
Storyboard.SetTargetProperty(a, new PropertyPath(OpacityProperty));

:

SolidColorBrush myAnimatedBrush = new SolidColorBrush();
myLabel.Background = myAnimatedBrush;
myAnimatedBrush.Color = Colors.Green;
Storyboard.SetTarget(a, myAnimatedBrush);
Storyboard.SetTargetProperty(a, new PropertyPath(SolidColorBrush.ColorProperty));