2012-08-01 44 views
1

我動畫窗口的透明度分辨率變化後隱藏動畫窗口是透明的

...

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。

有沒有人有一個想法發生了什麼,我怎麼可以避免這個問題?

問候 馬庫斯

回答

0

你必須有一個透明的窗口(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(); 
     } 
    } 
} 
+0

不幸的是上面是基本上一樣的問題。如果我要在我的FadeOut_Completed()事件處理函數中取消註釋this.Close(),它將在消失後確實關閉。由於WPF應用程序加載「不可接受」的速度,該窗口隱藏起來似乎是合適的詞。與衰落和屏幕分辨率變化的問題是,只有窗口的「陰影」重新顯示,雖然不透明度應該回到1. – Markus 2012-08-02 10:35:50

+0

哦,對不起,但我不知道爲什麼...... – 2012-08-02 13:16:58