Boa*_*rdy 19 c# wpf animation xaml window
我目前正在开发一个wpf c#应用程序.我已将事件触发器添加到窗体的xaml中,以便在窗口加载时淡入,并在窗口关闭时淡出.
褪色工作完美没有任何问题,但淡出效果不起作用.
我已经设置好了,所以窗口在加载时淡入,有一个持续时间为5秒,然后调用窗体淡出事件.
然而,窗口不淡出它只是直接关闭没有动画.以下是淡入和淡出事件的代码
<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:1"
AutoReverse="False" RepeatBehavior="1x" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Window.Unloaded">
<BeginStoryboard>
<Storyboard Name="FormFadeOut" Completed="FormFadeOut_Completed">
<DoubleAnimation Name="FormFadeOutAnimation"
Storyboard.TargetName="FormFadeOut"
Storyboard.TargetProperty="(Window.Opacity)"
From="1.0" To="0.0" Duration="0:0:1"
AutoReverse="False" RepeatBehavior="1x" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
Run Code Online (Sandbox Code Playgroud)
谢谢你尽你所能的帮助.
H.B*_*.B. 35
卸载不是一个合适的事件,我不知道这个事件是否甚至可以发生在Windows上.您需要处理Closing,阻止它实际关闭,启动动画并Completed在动画事件发生时关闭它.
例如
<Window ...
Closing="Window_Closing">
Run Code Online (Sandbox Code Playgroud)
private void Window_Closing(object sender, CancelEventArgs e)
{
Closing -= Window_Closing;
e.Cancel = true;
var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(1));
anim.Completed += (s, _) => this.Close();
this.BeginAnimation(UIElement.OpacityProperty, anim);
}
Run Code Online (Sandbox Code Playgroud)
试试这个样本
<Window x:Class="FadeInAndOutWindow.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Closing="Window_Closing" x:Name="winHelp">
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard>
<Storyboard Name="FormFade">
<DoubleAnimation Name="FormFadeAnimation"
Storyboard.TargetName="winHelp"
Storyboard.TargetProperty="(Window.Opacity)"
From="0.0"
To="1.0"
Duration="0:0:1"
AutoReverse="False"
RepeatBehavior="1x" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="Window.Unloaded">
<BeginStoryboard>
<Storyboard Name="FormFadeOut"
Completed="FormFadeOut_Completed">
<DoubleAnimation Name="FormFadeOutAnimation"
Storyboard.TargetName="winHelp"
Storyboard.TargetProperty="(Window.Opacity)"
From="1.0"
To="0.0"
Duration="0:0:1"
AutoReverse="False"
RepeatBehavior="1x" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
<Grid>
</Grid>
Run Code Online (Sandbox Code Playgroud)
namespace FadeInAndOutWindow
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private bool closeCompleted = false;
private void FormFadeOut_Completed(object sender, EventArgs e)
{
closeCompleted = true;
this.Close();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!closeCompleted)
{
FormFadeOut.Begin();
e.Cancel = true;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
HB解决方案很好但是没有有效地关闭窗口因为Close()调用window_Closing和循环.我的工作解决方案:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
AlreadyFaded = false;
}
bool AlreadyFaded;
private void window_Closing(object sender, CancelEventArgs e)
{
if (!AlreadyFaded)
{
AlreadyFaded = true;
e.Cancel = true;
var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(1));
anim.Completed += new EventHandler(anim_Completed);
this.BeginAnimation(UIElement.OpacityProperty, anim);
}
}
void anim_Completed(object sender, EventArgs e)
{
Close();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19273 次 |
| 最近记录: |