WPF 自定義窗口
在WPF中我們經常需要拋去windows自帶的窗口的樣式,設定一些自定義樣式的窗口,這個時候我們需要設定 WindowStyle="None" 來移除windows自帶的界面樣式。除此之外我們還需要設定 AllowsTransparency ="True" 來讓窗口支持透明的效果。
這里分享一個 自定義窗口的demo,該demo實現的基本功能有:
- 實現自定義窗口的最小化、最大化、還原、關閉功能,默認為最大化;
- 最小化、最大化、還原、關閉按鈕在捕獲鼠標之后會有動畫改變圖片;
- 雙擊最上面的菜單欄也能實現窗口的最大化或者還原;
- 支持窗口在非最大化的情況下拖動,最大化后不能拖動;
- 窗口的最大化不會遮罩windows系統的任務欄;

最大化、及還原的代碼:
1 if (isMaxSized) 2 { 3 this.Width = normalRect.Width; 4 this.Height = normalRect.Height; 5 this.Left = normalRect.Left; 6 this.Top = normalRect.Top; 7 this.WindowState = WindowState.Normal; 8 this.isMaxSized = false; 9 btn.Tag = "maxSize"; 10 } 11 else 12 { 13 normalRect = new Rect(this.Left, this.Top, this.ActualWidth, this.ActualHeight); 14 Rect rc = SystemParameters.WorkArea; 15 this.Width = rc.Width; 16 this.Height = rc.Height; 17 this.Left = 0; 18 this.Top = 0; 19 this.isMaxSized = true; 20 btn.Tag = "normalSize"; 21 }
切換圖片路徑的動畫代碼:
1 var objKeyFrames = new ObjectAnimationUsingKeyFrames(); 2 objKeyFrames.Duration = TimeSpan.FromMilliseconds(100); 3 objKeyFrames.KeyFrames.Add(new DiscreteObjectKeyFrame 4 { 5 Value = new BitmapImage(new Uri(imgUrl, UriKind.Relative)) 6 }); 7 Storyboard story = new Storyboard(); 8 Storyboard.SetTarget(story, img); 9 Storyboard.SetTargetProperty(story, new PropertyPath(Image.SourceProperty)); 10 story.Children.Add(objKeyFrames); 11 story.Begin();
PS:
- 窗口的最大化不會遮罩windows系統的任務欄,這里的話我們是先獲取整個屏幕的工作區域大小,然后設定窗口最大化后的寬度和高度為工作區的大小。
- 為了共享按鈕的MouseEnter及MouseLeave事件的動畫,我們沒在XAML中為每個按鈕寫動畫,而是通過后臺代碼來實現。
最后附上demo百度云下載地址 請猛戳這里 密碼: um7m
作者:rpoplar
出處:http://www.rzrgm.cn/rpoplar/
本文版權歸作者【rpoplar】和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究其法律責任的權利。
出處:http://www.rzrgm.cn/rpoplar/
本文版權歸作者【rpoplar】和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究其法律責任的權利。

浙公網安備 33010602011771號