淡化图像 - C# WPF
本文关键字:WPF 图像 | 更新日期: 2023-09-27 18:32:07
我不太明白为什么它在标准窗口中如此复杂,下面的代码工作得很好。但无论如何。
我试图淡入图像,然后将其淡出。目前我甚至无法让它淡入,我觉得很愚蠢,因为我确信我做错了什么。for 循环有效,但图像不透明度直到达到 99 才改变,然后突然改变。请帮忙,因为这让我发疯了。
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
for (int i = 1; i <+ 100; i++)
{
Logo.Opacity = i;
label1.Content = i;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 10);
dispatcherTimer.Start();
}
}
}
我不知道你想要什么行为,但在 WPF 中你应该使用动画。可能您必须调整参数:
private void Button_Click(object sender, RoutedEventArgs e)
{
DoubleAnimation da = new DoubleAnimation
{
From = 0,
To = 1,
Duration = new Duration(TimeSpan.FromSeconds(1)),
AutoReverse = true
};
Logo.BeginAnimation(OpacityProperty, da);
}
不透明度
double
,范围为 0.0 - 1.0。所以循环应该是这样的。
for (double i = 0.0; i <= 1.0; i+=0.01)
{
Logo.Opacity = i;
label1.Content = i;
}
但正如克莱门斯指出的那样,这也行不通。您将在短时间内完成整个循环。您应该为每个计时器滴答执行一个增量:
double CurrentOpacity = 0.0;
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
CurrentOpacity += 0.01;
if(CurrentOpacity <= 1.0)
{
Logo.Opacity = CurrentOpacity;
label1.Content =CurrentOpacity;
}
else
{
dispatcherTimer.Stop();
}
}