WPF制作窗口的启动和关闭动画

以下是用WPF实现的的一个窗口,为了使演示变得简单,我在窗口中只放了一个按钮。如下图所示:

 

但我们今天的主题是窗口启动时和关闭时都展示动画,如何进行动画处理,我以前写过一些WPF相关的文章。

要将窗口进行自定义,首先我们要去掉默认窗口的边框、背景色和标题栏。

这个不难,在WPF中,要把窗体彻底透明,只要做三件事即可:

(1)设置WindowStyle属性为None。

(2)AllowsTransparency属性设置为true。

(3)Background属性为Transparent。

为了使窗体易于控件,可以考虑设置ResizeMode="NoResize"。

 

窗口变成了透明,这使得窗口的整个区域就需要我们自己来设计了。

为了使自定义的窗口也有边框,在最外层,我们应该考虑使用Border,然后里面放一个Grid,这个Grid划分为两行,第一行作为标题栏,第二行作为窗口的客户区域。

    <Border x:Name="wb" CornerRadius="5" BorderThickness="3" BorderBrush="#FF1A55AA">
        <Border.Background>
            <LinearGradientBrush EndPoint="0.8,1" StartPoint="0.33,0">
                <GradientStop Color="#FF50B3E2" Offset="0"/>
                <GradientStop Color="#FF084168" Offset="1"/>
            </LinearGradientBrush>
        </Border.Background>
        <Grid x:Name="root" >
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            ……
        </Grid>
    </Border>


以上是窗口的大致框架。

接下来就是对最外层的Border进行剪裁,即设置它的Clip属性。

    <Border x:Name="wb" CornerRadius="5" BorderThickness="3" BorderBrush="#FF1A55AA">
        <Border.Background>
            <LinearGradientBrush EndPoint="0.8,1" StartPoint="0.33,0">
                <GradientStop Color="#FF50B3E2" Offset="0"/>
                <GradientStop Color="#FF084168" Offset="1"/>
            </LinearGradientBrush>
        </Border.Background>
        <Border.Clip>
            <GeometryGroup FillRule="Nonzero">
                <RectangleGeometry x:Name="r1" Rect="0,50,1000,100"/>
                <RectangleGeometry x:Name="r2" Rect="0,220,1000,100"/>
                <RectangleGeometry x:Name="r3" Rect="50,0,90,1000"/>
                <RectangleGeometry x:Name="r4" Rect="360,0,160,1000"/>
            </GeometryGroup>
        </Border.Clip>
        <Grid x:Name="root" >
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            ……
        </Grid>
    </Border>

那么,通过这四个矩形的裁剪,窗口会变成什么模样呢。看下图。


下面就是窗口的启动动画,通过对这四个矩形进行动画处理,在窗体的Loaded事件中播放动画,当动画播放完成时,再把这些Clip去掉,即设为null。

    <Window.Resources>
        <Storyboard x:Key="start">
            <RectAnimation Storyboard.TargetName="r1" Storyboard.TargetProperty="Rect"
                           Duration="0:0:6" To="0,0,900,900"/>
            <RectAnimation Storyboard.TargetName="r2" Storyboard.TargetProperty="Rect"
                           Duration="0:0:5" To="20,20,700,800"/>
           
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 在WPF关闭窗口时,可以添加动画效果来增加用户体验。下面是一种实现方式: 1. 创建一个关闭动画:可以使用WPF内置的动画效果,比如Opacity动画、位移动画等。这些动画可以在XAML中定义,也可以在代码中实现。 2. 在窗口关闭事件中应用动画窗口有一个Closing事件,可以在窗口即将关闭时触发。在这个事件中,可以为窗口添加自定义的动画效果。 3. 在动画完成后关闭窗口:当动画完成后,可以通过调用窗口的Close()方法来关闭窗口。 以下是一个示例代码: ```csharp private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { e.Cancel = true; // 阻止窗口立即关闭 // 创建动画 DoubleAnimation animation = new DoubleAnimation(); animation.From = 1.0; animation.To = 0.0; animation.Duration = new Duration(TimeSpan.FromSeconds(0.5)); animation.Completed += (s, _) => { this.Close(); // 动画完成后关闭窗口 }; // 应用动画 this.BeginAnimation(UIElement.OpacityProperty, animation); } ``` 在这个示例代码中,关闭窗口时会对窗口的不透明度进行从1到0的动画渐变。在动画完成时,调用Close()方法关闭窗口。 通过自定义关闭动画,可以增加用户体验,让窗口关闭时更加平滑和有趣。 ### 回答2: 在WPF关闭窗口时,可以使用动画效果来增加用户体验。下面是一个示例: 首先,我们需要在XAML文件中定义一个Storyboard动画,例如: ```xml <Window x:Class="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"> <Window.Resources> <Storyboard x:Key="CloseWindowAnimation"> <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.5"/> </Storyboard> </Window.Resources> <!-- 页面内容 --> </Window> ``` 在代码中,我们可以通过触发动画关闭窗口。例如,我们可以在关闭按钮的Click事件中执行以下代码: ```csharp private void CloseButton_Click(object sender, RoutedEventArgs e) { Storyboard sb = FindResource("CloseWindowAnimation") as Storyboard; if (sb != null) { sb.Completed += CloseStoryboardCompleted; sb.Begin(); } } private void CloseStoryboardCompleted(object sender, EventArgs e) { Close(); } ``` 上面的代码中,我们首先通过FindResource方法获取到之前定义的Storyboard动画。然后,我们添加了一个Completed事件处理程序,当动画完成后关闭窗口。 这样,当用户点击关闭按钮时,窗口将会逐渐变为透明状态,并在动画完成后关闭。 这是一个简单的例子来实现WPF关闭窗口动画的效果。你可以根据自己的需求,对动画进行更多的自定义。 ### 回答3: 在WPF关闭窗口时,可以通过使用动画效果来实现平滑的过渡效果。 首先,需要在XAML文件中定义一个Storyboard(故事板),并在其中定义动画效果。例如,可以使用DoubleAnimation进行窗口的淡出效果,即将窗口的不透明度从1逐渐减小到0。 ```xaml <Window.Resources> <Storyboard x:Key="ClosingAnimation"> <DoubleAnimation From="1" To="0" Duration="0:0:0.3" Storyboard.TargetProperty="Opacity" /> </Storyboard> </Window.Resources> ``` 然后,在窗口的Closing事件中,使用VisualStateManager来触发动画效果。可以添加一个Closing事件的处理方法,然后在方法中调用VisualStateManager.GoToElementState方法,并指定要使用的状态(在此情况下为"ClosingState")。 ```csharp private void Window_Closing(object sender, CancelEventArgs e) { VisualStateManager.GoToElementState(this, "ClosingState", true); e.Cancel = true; // 取消窗口的默认关闭行为 } ``` 最后,在窗口的Loaded事件中,可以注册一个事件侦听器以侦听动画的Completed事件,并在此事件中关闭窗口。 ```csharp private void Window_Loaded(object sender, RoutedEventArgs e) { var sb = FindResource("ClosingAnimation") as Storyboard; sb.Completed += (s, args) => Close(); } ``` 这样,在关闭窗口时,窗口的不透明度会平滑地减小,在动画完成时窗口会自动关闭。注意,在使用动画效果关闭窗口时,需要将窗口的默认关闭行为取消(通过设置e.Cancel = true),并在动画完成后手动关闭窗口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值