【问题标题】:Animate Window Resize (Width and Height) C# WPF动画窗口调整大小(宽度和高度)C# WPF
【发布时间】:2009-11-20 09:26:36
【问题描述】:

我正在寻找一些关于动画窗口调整打开窗口大小的帮助! 似乎无法弄清楚这一点!

我只是在使用自动取款机。

this.Width = 500;

任何帮助都会很棒! 谢谢。

【问题讨论】:

    标签: c# wpf xaml animation window


    【解决方案1】:

    我自己已经回答了这个问题。这是一些示例代码。

        static System.Windows.Forms.Timer _Timer = new System.Windows.Forms.Timer(); 
        int _Stop = 0;
    
        private void This_Loaded(object sender, RoutedEventArgs e)
        {
            _Timer.Tick += new EventHandler(timer_Tick);
            _Timer.Interval = (20); 
    
            resize(500,500)
        }
    
        private void timer_Tick(Object myObject, EventArgs myEventArgs)
        {
            if (_Stop == 0)
            {
                _RatioHeight    = ((this.Height -   _Height)    / 12)* -1;
                _RatioWidth     = ((this.Width -    _Width)     / 12)* -1;
            }
            _Stop++;
    
            this.Height += _RatioHeight;
            this.Width  += _RatioWidth;
    
            if (_Stop == 12)
            {
                _Timer.Stop();
                _Timer.Enabled = false;
                _Timer.Dispose();
    
                _Stop = 0;
    
                this.Height = _Height;
                this.Width  = _Width;
            }
        }
    
        public void resize(double _PassedHeight, double _PassedWidth)
        {
            _Height = _PassedHeight;
            _Width  = _PassedWidth;
    
            _Timer.Enabled = true;
            _Timer.Start();
        }
    

    以 12 个“滴答声”非常快速地调整窗口大小,可以在 _Timer.Interval 中放慢速度。在 12 个刻度后将其打磨掉,最终调整为精确大小。

    希望这对某些人有所帮助。

    【讨论】:

      【解决方案2】:

      你可以使用窗口动画,这里是 xaml

      <Window x:Class="dlgControls" Name="dlgControls"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          Title="" Height="300" Width="300">
      
          <Window.Resources>
              <Storyboard x:Key="showWin">
                  <DoubleAnimation Storyboard.TargetName="dlgControls" Storyboard.TargetProperty="Height" Duration="0:0:.5" To="300" BeginTime="0:0:1"/>
              </Storyboard>
      
              <Storyboard x:Key="hideWin">
                  <DoubleAnimation Storyboard.TargetName="dlgControls" Storyboard.TargetProperty="Height" Duration="0:0:.5" To="150" BeginTime="0:0:1"/>
              </Storyboard>
          </Window.Resources>
          <Grid RenderTransformOrigin="0.5,0.5">
              <Button Name="btnOpen" Content="Open" HorizontalAlignment="Left" Margin="184,98,0,0" VerticalAlignment="Top" Width="75"/>
              <Button Name="btnClose" Content="Close" HorizontalAlignment="Left" Margin="184,222,0,0" VerticalAlignment="Top" Width="75"/>
          </Grid>
      
      </Window>
      

      动画使用这样的代码

      Imports System.Windows.Media.Animation
      
      Public Class dlgControls
          Dim showWin As Storyboard
          Dim hideWin As Storyboard
      
          Private Sub btnOpen_Click(sender As Object, e As Windows.RoutedEventArgs) Handles btnOpen.Click
              BeginStoryboard(showWin)
          End Sub
      
          Private Sub dlgControls_Loaded(sender As Object, e As Windows.RoutedEventArgs) Handles Me.Loaded
              showWin = Me.Resources("showWin")
              hideWin = Me.Resources("hideWin")
          End Sub
      
          Private Sub btnClose_Click(sender As Object, e As Windows.RoutedEventArgs) Handles btnClose.Click
              BeginStoryboard(hideWin)
          End Sub
      End Class
      

      【讨论】:

      • 不敢相信这没有更多的选票。非常优雅,正好解决了我的问题
      【解决方案3】:
      System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
      dispatcherTimer.Tick += dispatcherTimer_Tick;
      dispatcherTimer.Interval = new TimeSpan(0,0,0,0,10); // Control animation speed / how often the tick will be called.
      dispatcherTimer.Start();
      
      
      private void dispatcherTimer_Tick(object sender, EventArgs e)
      {
           if ( this.Width < 500 )
           {
                 this.Width += 10;
           } 
           else 
           {
                 DispatcherTimer timer = (DispatcherTimer)sender;
                 timer.Stop();
           }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-02
        • 2012-06-19
        • 2012-12-15
        • 2011-05-21
        • 1970-01-01
        • 1970-01-01
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多