程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 在WPF中仿制QQ2013登錄窗口的關閉效果

在WPF中仿制QQ2013登錄窗口的關閉效果

編輯:關於.NET

昨天,有位朋友問我,WPF能做出像QQ2013窗口在關閉時那個貌似透明過渡的動畫嗎?我就歪著臉跟他說:"只有你想不到的,沒有WPF做不到的"。

他又接著說:"我知道肯定會用到動畫來控制畫刷,但是那個透明的'淡出'怎麼弄呢?"

我就給他演示了一個類似的效果。

大家有沒有注意到System.Windows.UIElement.OpacityMask這個屬性,它是一個Brush類型,也就是說,你可以使用任意Brush的類來充當。這個屬性只提取賦給它的Brush中的所有顏色的A值。即ARGB中的A值,其他通道將忽略,然後用這些不透明值來替目標可視化元素中的不透明值。具體大家可參考MSDN。

其實原理非常簡單,就以下兩個條件:一是把窗口變成透明,這個不介紹,大家可以看我後面貼的代碼。第二就是OpacityMask屬性用漸變畫刷,只有這樣才能做到漸變透明的效果。然後我們就對這個漸變畫刷中各顏色點的Offset進行動畫處理就可以了。

先看看最終效果,看看像不像,呵呵。

查看本欄目

然後是少量的處理代碼。

public partial class MainWindow : Window
    {
        System.Windows.Media.Animation.Storyboard std = null;
        public MainWindow()
        {
            InitializeComponent();
            std = (System.Windows.Media.Animation.Storyboard)layoutroot.Resources["std"];
            std.Completed += (t, r) => this.Close();
            this.layoutroot.Loaded += (sd, ee) => {
                // 設置Grid的圓形剪輯的圓心和半徑
                EllipseGeometry eg = (EllipseGeometry)this.layoutroot.Clip;
                double dx = layoutroot.ActualWidth /2d;
                double dy=layoutroot.ActualHeight/2d;
                eg.Center = new Point(dx, dy);
                eg.RadiusX = dx;
                eg.RadiusY = dy;
            };
   
        }
   
   
        private void OnClick(object sender, RoutedEventArgs e)
        {
            if (std != null)
            {
                std.Begin();
            }
        }
    }

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved