2012-02-08 57 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