• WPF制作子窗体的弹出动画效果


    创建一个WPF应用程序WpfApplication1,新建个窗体DialogWin

    1. <Windowx:Class="WpfApplication1.DialogWin" 
    2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    4.     Title="DialogWin"Height="632"Width="635"WindowStyle="None"   
    5.      Name="DW1"   Background="Transparent"AllowsTransparency="True"WindowStartupLocation="CenterScreen"WindowState="Normal"> 
    6.     <Window.Resources> 
    7.         <!--此样式能去除按钮点击后的虚线框--> 
    8.         <Stylex:Key="MyFocusVisual"> 
    9.             <SetterProperty="Control.Template"> 
    10.                 <Setter.Value> 
    11.                     <ControlTemplate> 
    12.                         <RectangleMargin="-2"StrokeThickness="0"Stroke="Red"StrokeDashArray="1 2"/> 
    13.                     </ControlTemplate> 
    14.                 </Setter.Value> 
    15.             </Setter> 
    16.         </Style> 
    17.         <!--原始旋转出来样例--> 
    18.         <Storyboardx:Key="showDW"> 
    19.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    20.                         Storyboard.TargetProperty="Opacity" 
    21.                         From="0.2"To="1"Duration="0:0:2.5"> 
    22.             </DoubleAnimation> 
    23.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    24.                         Storyboard.TargetProperty="RenderTransform.Children[1].Angle" 
    25.                         From="70"To="0"Duration="0:0:2"> 
    26.             </DoubleAnimation> 
    27.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    28.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    29.                         From="0"To="1"Duration="0:0:2"  
    30.                         AccelerationRatio="1"> 
    31.             </DoubleAnimation> 
    32.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    33.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    34.                         From="0"To="1"Duration="0:0:2"  
    35.                         AccelerationRatio="1"> 
    36.             </DoubleAnimation> 
    37.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    38.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    39.                         To="0.98"BeginTime="0:0:2"Duration="0:0:0.05"  
    40.                         DecelerationRatio="1"> 
    41.             </DoubleAnimation> 
    42.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    43.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    44.                         To="0.98"BeginTime="0:0:2"Duration="0:0:0.05"  
    45.                         DecelerationRatio="1"> 
    46.             </DoubleAnimation> 
    47.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    48.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    49.                         To="1"BeginTime="0:0:2.05"Duration="0:0:0.2"   
    50.                         AccelerationRatio="1"> 
    51.             </DoubleAnimation> 
    52.             <DoubleAnimationStoryboard.TargetName="Canvas1"               
    53.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    54.                         To="1"BeginTime="0:0:2.05"Duration="0:0:0.2"  
    55.                         AccelerationRatio="1"> 
    56.             </DoubleAnimation> 
    57.         </Storyboard> 
    58.         <!--原始的旋转回去样例--> 
    59.         <Storyboardx:Key="closeDW"> 
    60.             <DoubleAnimationStoryboard.TargetName="Canvas1"  
    61.                       Storyboard.TargetProperty="RenderTransform.Children[1].Angle" 
    62.                       To="360"Duration="0:0:1.5"> 
    63.             </DoubleAnimation> 
    64.             <DoubleAnimationStoryboard.TargetName="Canvas1"  
    65.                       Storyboard.TargetProperty="Opacity" 
    66.                       To="0"Duration="0:0:3"> 
    67.             </DoubleAnimation> 
    68.             <DoubleAnimationStoryboard.TargetName="Canvas1"  
    69.                       Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    70.                       To="0"Duration="0:0:1.5"AccelerationRatio="1"> 
    71.             </DoubleAnimation> 
    72.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    73.                       Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    74.                       To="0"Duration="0:0:1.5"AccelerationRatio="1"> 
    75.             </DoubleAnimation> 
    76.         </Storyboard> 
    77.         <!--转出来--> 
    78.         <Storyboardx:Key="showDW1"> 
    79.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    80.                         Storyboard.TargetProperty="Opacity" 
    81.                         From="0"To="1"Duration="0:0:0.2"> 
    82.             </DoubleAnimation> 
    83.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    84.                         Storyboard.TargetProperty="RenderTransform.Children[1].Angle" 
    85.                         From="180"To="0"Duration="0:0:0.2"> 
    86.             </DoubleAnimation> 
    87.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    88.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    89.                         From="0.2"To="1"Duration="0:0:0.2"  
    90.                         AccelerationRatio="1"> 
    91.             </DoubleAnimation> 
    92.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    93.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    94.                         From="0.2"To="1"Duration="0:0:0.2"  
    95.                         AccelerationRatio="1"> 
    96.             </DoubleAnimation> 
    97.         </Storyboard> 
    98.         <!--弹出来--> 
    99.         <Storyboardx:Key="showDW2"> 
    100.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    101.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    102.                         From="0.2"To="0.5"Duration="0:0:0.04"> 
    103.             </DoubleAnimation> 
    104.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    105.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    106.                         From="0.2"To="0.5"Duration="0:0:0.04"> 
    107.             </DoubleAnimation> 
    108.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    109.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    110.                           From="0.5"To="1"Duration="0:0:0.04"BeginTime="0:0:0.04"> 
    111.             </DoubleAnimation> 
    112.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    113.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    114.                          From="0.5"To="1"Duration="0:0:0.04"BeginTime="0:0:0.04"> 
    115.             </DoubleAnimation> 
    116.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    117.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    118.                          From="1"To="1.2"Duration="0:0:0.04"BeginTime="0:0:0.08"AutoReverse="True"> 
    119.             </DoubleAnimation> 
    120.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    121.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    122.                         From="1"  To="1.2"Duration="0:0:0.04"BeginTime="0:0:0.08"AutoReverse="True"> 
    123.             </DoubleAnimation>           
    124.         </Storyboard> 
    125.         <!--转回去--> 
    126.         <Storyboardx:Key="closeDW1"> 
    127.             <DoubleAnimationStoryboard.TargetName="Canvas1"  
    128.                       Storyboard.TargetProperty="RenderTransform.Children[1].Angle" 
    129.                       To="180"Duration="0:0:0.2"> 
    130.             </DoubleAnimation> 
    131.             <DoubleAnimationStoryboard.TargetName="Canvas1"  
    132.                       Storyboard.TargetProperty="Opacity" 
    133.                       To="0"Duration="0:0:0.2"> 
    134.             </DoubleAnimation> 
    135.             <DoubleAnimationStoryboard.TargetName="Canvas1"  
    136.                       Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    137.                       To="0.2"Duration="0:0:0.2"AccelerationRatio="1"> 
    138.             </DoubleAnimation> 
    139.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    140.                       Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    141.                       To="0.2"Duration="0:0:0.2"AccelerationRatio="1"> 
    142.             </DoubleAnimation> 
    143.         </Storyboard> 
    144.          
    145.         <!--弹回去--> 
    146.         <Storyboardx:Key="closeDW2"> 
    147.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    148.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    149.                         From="1"To="1.2"Duration="0:0:0.04"  AutoReverse="True"> 
    150.             </DoubleAnimation> 
    151.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    152.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    153.                         From="1"To="1.2"Duration="0:0:0.04"  AutoReverse="True"> 
    154.             </DoubleAnimation> 
    155.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    156.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    157.                           From="1"To="0.5"Duration="0:0:0.04"BeginTime="0:0:0.04"> 
    158.             </DoubleAnimation> 
    159.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    160.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    161.                          From="1"To="0.5"Duration="0:0:0.04"BeginTime="0:0:0.04"> 
    162.             </DoubleAnimation> 
    163.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    164.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleX" 
    165.                          From="0.5"To="0.2"Duration="0:0:0.04"BeginTime="0:0:0.08"  > 
    166.             </DoubleAnimation> 
    167.             <DoubleAnimationStoryboard.TargetName="Canvas1" 
    168.                         Storyboard.TargetProperty="RenderTransform.Children[0].ScaleY" 
    169.                         From="0.5"  To="0.2"Duration="0:0:0.04"BeginTime="0:0:0.08"> 
    170.             </DoubleAnimation> 
    171.         </Storyboard> 
    172.     </Window.Resources> 
    173.      
    174.     <Window.Triggers> 
    175.         <!--设置DW1的事件触发--> 
    176.         <!--注意对窗体window的name取为DW1--> 
    177.         <EventTriggerSourceName="DW1"RoutedEvent="Window.Loaded"> 
    178.             <BeginStoryboardName="showQueryCanvasStoryboard2"  
    179.                       Storyboard="{StaticResource showDW}"> 
    180.             </BeginStoryboard> 
    181.         </EventTrigger> 
    182.         <!--设置button1的事件触发--> 
    183.         <!--注意对按钮的name取为button1--> 
    184.         <EventTriggerSourceName="button1"RoutedEvent="Button.Click"> 
    185.             <BeginStoryboardName="closeQueryCanvasStoryboard"  
    186.                       Storyboard="{StaticResource closeDW}"> 
    187.             </BeginStoryboard> 
    188.         </EventTrigger> 
    189.          
    190.     </Window.Triggers> 
    191.      
    192.     <CanvasBackground="Transparent"Height="257"Width="214">         
    193.         <CanvasBackground="Brown"Height="236"Width="201"Canvas.Left="9"Canvas.Top="14"Name="Canvas1"> 
    194.             <!--设置动画--> 
    195.             <Canvas.RenderTransform> 
    196.                 <TransformGroup> 
    197.                     <ScaleTransformCenterX="100"CenterY="50"></ScaleTransform><!--缩放中心为100,50。RenderTransform.Children[0]--> 
    198.                     <RotateTransformCenterX="100"CenterY="50"></RotateTransform><!--旋转中心为100,50。RenderTransform.Children[1]--> 
    199.                 </TransformGroup> 
    200.             </Canvas.RenderTransform> 
    201.             <ButtonMargin="98,107,124,127"Name="button1"  FocusVisualStyle="{DynamicResource MyFocusVisual}" 
    202.                 Click="button1_Click"  Height="28"Width="112"Canvas.Left="-53"Canvas.Top="77">关闭</Button> 
    203.         <CheckBoxHeight="31"HorizontalAlignment="Left"Margin="32,25,0,0"Name="checkBox1"VerticalAlignment="Top"Width="75"Canvas.Left="11"Canvas.Top="-1">CheckBox</CheckBox> 
    204.         <TextBlockHeight="35"Margin="124,21,34,0"Name="textBlock1"VerticalAlignment="Top"Background="BlueViolet"Text="dfdf"Width="60"Canvas.Left="-73"Canvas.Top="43"/> 
    205.         </Canvas> 
    206.     </Canvas>    
    207. </Window> 

    cs代码:

    添加引用

    1. using System.Windows.Threading 

    1. privatevoid button1_Click(object sender, RoutedEventArgs e) 
    2.     // this.Close();  
    3.     /////timer定义 
    4.     tm.Tick += new EventHandler(tm_Tick); 
    5.     tm.Interval = TimeSpan.FromSeconds(0.2); 
    6.     tm.Start();  
    7. DispatcherTimer tm = new DispatcherTimer(); 
    8. void tm_Tick(object sender, EventArgs e) 
    9. { this.Close(); } 

    其中动画目标为Canvas1,包括:

    慢速旋转显示(showDW)、慢速旋转消失(closeDW)

    快速旋转显示(showDW1)、快速旋转消失(closeDW1)

    快速弹出显示(showDW2)、快速旋转消失(closeDW2)

    快速旋转显示(showDW1):

    time:0    →   0.2

    旋转角度:180→0

       透明度:  0→1

          放大: X向:0.2→1  Y向:0.2→1

    快速弹出显示(showDW2):

    time:0    →       0.04  →        0.08    →←      0.12

              放大              放大               放大(并复原)

       X向:0.2→0.5     0.5→1             1→1.2→1

       Y向:0.2→0.5     0.5→1             1→1.2→1

    最后在主窗口的
    1.MainWindow.xaml里的<Grid>之间放上按钮:
        <Grid>
            <Button Content="显示子窗口" Height="23" Click="ShowWindow_Click" Margin="114,138,141,138" />
        </Grid>

    2.MainWindow.xaml.cs里加上相应的按钮事件:

    public partial class MainWindow : Window
        {
            DialogWin myChildWindow = new DialogWin();
            public MainWindow()
            {
                InitializeComponent();
                //子窗口事件绑定
    myChildWindow.Closed += new EventHandler(myChildWindow_Closed);
            }
            #region 子窗口事件代码
    void myChildWindow_Closed(object sender, EventArgs e)
            {
             }
            private void ShowWindow_Click(object sender, RoutedEventArgs e)
            {
                myChildWindow.Title = "子窗口信息";
    SolidColorBrush(Colors.Yellow);
                myChildWindow.Opacity = 0.9;
                myChildWindow.Foreground = new SolidColorBrush(Colors.Red);
                myChildWindow.FontSize = 14;
                myChildWindow.Show();
            }
            #endregion
        }

  • 相关阅读:
    libevent
    STL中mem_fun和mem_fun_ref的用法
    java的awt和swing的区别于联系
    数据库流程控制的使用IF CASE LOOP LEAVE ITERETA REPEAT WHILE
    mysql的常用函数
    数据库的基本知识点
    使用myeclipse 打包并运行普通java项目
    getClass()与getName()方法
    Java中的final关键字
    基本类型包装类的常量池技术
  • 原文地址:https://www.cnblogs.com/hnfxs/p/3418788.html
Copyright © 2020-2023  润新知