淡化图像 - 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();
      }
   }
}

淡化图像 - C# WPF

我不知道你想要什么行为,但在 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();
    }
}