2012-02-08 45 views
2

我希望WPF窗口在打開時淡入。我爲窗口設置負載以下觸發:在淡入之前導致窗口內容快速白色閃爍的窗口淡入

<Window.Triggers> 
    <EventTrigger RoutedEvent="Window.Loaded"> 
     <BeginStoryboard> 
      <Storyboard Name="FormFade"> 
       <DoubleAnimation Name="FormFadeAnimation" 
             Storyboard.TargetName="Window" 
             Storyboard.TargetProperty="(Window.Opacity)" 
             From="0.0" To="1.0" Duration="0:0:5" 
             AutoReverse="False" RepeatBehavior="1x" 
            /> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</Window.Triggers> 

的問題是,當窗口第一次加載,它顯示全白的內容,然後消失,然後在窗口中的內容如預期變淡英寸我怎樣才能擺脫一開始就發生的白色閃光?我甚至將窗口的背景設置爲黑色,但仍然呈白色閃爍。

回答

2

。在您的Window.Loaded處理程序完成執行之前,Animation不會運行。我能夠這樣做是爲了重現您的問題:

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
     } 

     void MainWindow_Loaded(object sender, RoutedEventArgs e) 
     { 
      Thread.Sleep(1000); 
     } 
    } 
} 

屏幕將是白色的1000毫秒,因爲動畫將無法運行,直到睡眠結束。如果你拿掉Thread.Sleep()調用,結果就是你所期望的。我的猜測是你在你的Loaded處理器中做了很多工作,動畫被拖延了。

通過這裏的方法是MainWindow.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" x:Name="Window"> 
    <Window.Triggers> 
     <EventTrigger RoutedEvent="Window.Loaded"> 
      <BeginStoryboard> 
       <Storyboard Name="FormFade"> 
        <DoubleAnimation Name="FormFadeAnimation" 
             Storyboard.TargetName="Window" 
             Storyboard.TargetProperty="(Window.Opacity)" 
             From="0.0" To="1.0" Duration="0:0:5" 
             AutoReverse="False" RepeatBehavior="1x" 
            /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Window.Triggers> 
    <Grid> 
     <TextBlock>asdf</TextBlock> 
    </Grid> 
</Window> 
+0

我刪除了處理程序中的所有處理,仍然出現白色窗口的閃爍。它很快但仍然發生。 – user31673 2012-02-09 00:27:40

+0

那麼白色閃爍不會發生在我身上。也許你應該只用一個窗口創建一個新的WPF Forms項目,並像上面所做的那樣消除淡入淡出的效果,只是爲了確保問題不是由於開發環境中的某些奇怪而與編碼邏輯相反。 – 2012-02-09 02:13:30

0

嘗試將Window.Opacity設置爲0,以<Window>標記開頭。

編輯:@ H.B是絕對正確的。該窗口還需要AllowsTransparency=true,爲此,窗口鑲邊需要關閉(WindowStyle=None)。我複製你的問題,那麼這樣做是爲了讓它工作,你想要的方式:我認爲這個問題是處理你的Window.Loaded處理造成

<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" 
     Opacity="0" AllowsTransparency="True" WindowStyle="None"> 
    <Window.Triggers> 
     <EventTrigger RoutedEvent="Window.Loaded"> 
      <BeginStoryboard> 
       <Storyboard Name="FormFade"> 
        <DoubleAnimation Name="FormFadeAnimation" 
             Storyboard.TargetProperty="(Window.Opacity)" 
             From="0.0" To="1.0" Duration="0:0:5" 
             AutoReverse="False" RepeatBehavior="1x" 
            /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Window.Triggers> 
    <Grid> 

    </Grid> 
</Window> 
+0

仍然沒有有所作爲。這很奇怪,因爲我在Window_Loaded事件處理程序中有代碼,並且如果我在那裏設置斷點,則窗口顯示的內容全部爲白色。即使黑色的背景還沒有確定。不透明度值爲0,背景爲黑色,但窗口內容全部爲白色。 – user31673 2012-02-08 23:22:19

+0

這並不讓我感到意外,但如果您在XAML中將不透明度設置爲0,則窗口完全顯示,這讓我感到意外。 – 2012-02-08 23:26:56

+0

@ChrisShain:這並不令人驚訝,因爲默認情況下'AllowsTransparency'爲'false',所以透明度會變黑。 – 2012-02-09 01:28:24