我希望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>
问题在于,当窗口首次加载时,它会显示内容的所有白色,然后消失,然后窗口内容按预期淡入。我怎样才能摆脱刚开始时发生的白色闪光?我甚至将窗口的背景设置为黑色但仍然闪烁白色。
答案 0 :(得分:2)
我认为问题是由Window.Loaded处理程序中的处理引起的。在Window.Loaded处理程序完成执行之前,动画将不会运行。我能够通过这样做来重现你的问题:
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>
答案 1 :(得分:0)
尝试在Window.Opacity
标记中将<Window>
设置为0开始。
AllowsTransparency=true
,为此,窗口镶边需要关闭(WindowStyle=None
)。我重现了你的问题,然后按照你想要的方式做到了这一点:
<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>