【问题标题】:UWP blinking textUWP 闪烁文本
【发布时间】:2016-06-21 10:43:30
【问题描述】:

这听起来很简单,但我找不到方法。

我只想要 TextBlock 中的闪烁文本。有没有办法轻松搞定?

我能想到的唯一方法是使用计时器并手动更改 TextBlock 前景。当然有一个简单的方法来做到这一点。我就是想不通。

谢谢!

【问题讨论】:

  • 您可以创建一个处理闪烁活动的情节提要并无限期使用此情节提要
  • 您是否尝试过在 XAML 中创建一个 Storyboard 来更改前景;在 UserControl 的 Loaded 事件中启动它?

标签: c# uwp windows-10-universal uwp-xaml


【解决方案1】:

你可以在你的 XAML 标记中声明一个 Storyboard 动画,它使文本永远闪烁:

<TextBlock Text="I'm Blinking!">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Resources>
                <Storyboard x:Key="flashAnimation" >
                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" AutoReverse="True" Duration="0:0:0.5" RepeatBehavior="Forever" />
                </Storyboard>
            </Style.Resources>
        </Style>
    </TextBlock.Style>
</TextBlock>

这是使用我在 WPF 和 WinRT XAML 中的经验,但我很确定 UWP 使用相同的 Storyboard 动画。

这是微软在 MSDN 上的方便参考:Animations Overview

希望这会有所帮助!

【讨论】:

  • 杰夫,你是男人!!!谢谢!我知道一定有一些简单的东西。我需要了解有关故事板的更多信息。感谢分享,冠军!
  • 在 UWP 中,“在样式中找不到可附加的属性资源”
【解决方案2】:

从后面的代码 (C#) 中,您可以使用如下代码来实现:

        Storyboard storyboard = new Storyboard();
        storyboard.Duration = new Duration(TimeSpan.FromSeconds(10.0));
        DoubleAnimation opacityAnimation = new DoubleAnimation()
        {
            From = 1.0,
            To = 0.0,
            BeginTime = TimeSpan.FromSeconds(5.0),
            Duration = new Duration(TimeSpan.FromSeconds(5.0))
        };

        Storyboard.SetTarget(opacityAnimation, txtBlink);
        Storyboard.SetTargetProperty(opacityAnimation, "Opacity");
        storyboard.Children.Add(opacityAnimation);
        storyboard.RepeatBehavior = RepeatBehavior.Forever;
        storyboard.AutoReverse = true;
        storyboard.Begin();

假设你有一个文本块:

        <TextBlock x:Name="txtBlink" FontSize="32">Some text</TextBlock>

【讨论】:

  • 您可能需要将SetTargetProperty() 的第二个参数更改为new PropertyPath ("Opacity") 以便将字符串转换为PropertyPath
【解决方案3】:

对于闪烁的文本,我认为计时器是最简单的方法。 (虽然我知道您有使用计时器并寻找替代品的想法,但实际上应该可以达到目的) 可能像下面这样的东西可以帮助你。

Timer timer = new Timer();

    public void Blinker()
    {            
        timer.Interval = 500;

        timer.Start();

        timer.Tick += new EventHandler(timer_tick);
    }

    void timer_tick(object sender, EventArgs e)
    {
        if(label3.ForeColor = System.Drawing.Color.Green)
        {
            label3.ForeColor = System.Drawing.Color.White;
        }

        else
        {
            label3.ForeColor = System.Drawing.Color.Green;
        }            
    }

    public void StopBlinker()
    {
        timer.Stop();
    }

现在您可以适当地调用blinker 方法来使您的文本闪烁。

【讨论】:

  • 是的,这正是我的想法。但我喜欢故事板的概念。 +1 分享:)
猜你喜欢
  • 2017-03-08
  • 2018-01-30
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多