【问题标题】:After resolution change hidden animated window is transparent分辨率更改后隐藏的动画窗口是透明的
【发布时间】:2013-08-21 14:51:17
【问题描述】:

我正在为窗口的不透明度设置动画

...

  DoubleAnimation myDoubleAnimation =
          new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(0.25)), FillBehavior.Stop);
  Storyboard.SetTargetName(myDoubleAnimation, "wndNumpad");
  Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Window.OpacityProperty));
  m_fadeOut = new Storyboard();
  m_fadeOut.Children.Add(myDoubleAnimation);
  m_fadeOut.Completed += new EventHandler(FadeOut_Completed);

...

private void FadeOut_Completed(object sender, EventArgs e)
{
  //  Only hide the running instance
  this.Visibility = System.Windows.Visibility.Hidden;
  // this.Close();
}

如果在 FadeOut_Completed() 运行后更改了监视器的屏幕分辨率,即窗口的不透明度被动画化并且窗口被隐藏。然后重新显示窗口将显示几乎透明的窗口。猜测我会说它在隐藏窗口时的不透明度,尽管 Window.Opacity 属性声称不透明度为 1。如果我不设置动画,而只是将不透明度设置为 0 并隐藏窗口并在分辨率更改后将不透明度设置回 1 窗口按预期重新显示。我还尝试在 FadeOut_Completed 中将不透明度设置回 1。

有谁知道发生了什么以及如何避免这个问题?

问候 马库斯

【问题讨论】:

    标签: c# wpf animation


    【解决方案1】:

    您必须有一个透明窗口 (AllowsTransparency="True")、不可调整大小 (ResizeMode="NoResize") 和无边框 (WindowStyle="None")。在 C# 代码中,我创建了一个 DoubleAnimation 来更改窗口的不透明度,完成后,窗口将关闭。

    XAML 代码:

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525" Background="Red" WindowStyle="None" AllowsTransparency="True" ResizeMode="NoResize">
        <Grid>
    
        </Grid>
    </Window>
    

    C#代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Windows.Media.Animation;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                DoubleAnimation da = new DoubleAnimation();
                da.From = 1;
                da.To = 0;
                da.Duration = new Duration(TimeSpan.FromSeconds(2));
                da.Completed += new EventHandler(da_Completed);
                this.BeginAnimation(OpacityProperty, da);
            }
    
            void da_Completed(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    }
    

    【讨论】:

    • 不幸的是,上面的内容与问题中的基本相同。如果我在 FadeOut_Completed() 事件处理程序中取消注释 this.Close() ,它确实会在消失后关闭。由于 WPF 应用程序加载的速度,该窗口被隐藏,“不可接受”似乎是合适的词。褪色和屏幕分辨率变化的问题是,尽管不透明度应该回到 1,但仅重新显示了窗口的“阴影”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2014-01-19
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多