【发布时间】:2019-06-19 03:37:50
【问题描述】:
我正在尝试用 C#/WPF 中尽可能少的代码组合一个闪烁“Hello World”文本的简单演示项目。我所写的内容编译并运行,但实际上并没有使文本闪烁(它基于每 2 秒触发一次并更改标签可见性的计时器。关于为什么文本不闪烁或更有效的任何想法方法会是什么?代码:
using System;
using System.Timers;
using System.Windows;
namespace BlinkingText
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
static Timer _timer;
static MainWindow window = new MainWindow();
public MainWindow()
{
InitializeComponent();
Start();
}
public static void Start()
{
var timer = new Timer(2000);
timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
timer.Enabled = true;
_timer = timer;
}
public static void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (window.HelloWorldLabel.Visibility == Visibility.Hidden)
{
Application.Current.Dispatcher.Invoke((Action)delegate
{
window.HelloWorldLabel.Visibility = Visibility.Visible;
});
}
else
{
Application.Current.Dispatcher.Invoke((Action)delegate
{
window.HelloWorldLabel.Visibility = Visibility.Hidden;
});
}
}
}
}
【问题讨论】:
-
您应该能够完全在 XAML 中完成此操作,而无需 C# 代码;创建一个
AnimationTimeline并将文本不透明度从 0% 更改为 100%,然后延迟返回 0%。 -
此外,在 WPF 应用程序中,您将使用 DispatcherTimer 来避免调用
Dispatcher.Invoke。 Start 方法和 Timer 和 Window 字段都不应该是静态的。