设为首页 收藏本站
查看: 420|回复: 0

WPF自定义窗口(Windows Server 2012 Style)

[复制链接]

尚未签到

发表于 2015-5-2 13:15:14 | 显示全部楼层 |阅读模式
  先上图
DSC0000.png
  新建CustomControl,名:HeaderedWindow
  Themes\Generic.aml文件夹下加入
  笔刷,转换器


DSC0001.gif DSC0002.gif


1     
2     
3     
View Code   最大化,最小化,关闭按钮





1
2         
3            
4                 
5                     
6                        
7                        
8                        
9                     
10                     
11                        
12                        
13                        
14                             
15                        
16                        
17                        
18                     
19                 
20            
21         
22     
23
24     
25         
26            
27                 
28                     
29                        
30                        
31                        
32                        
33                     
34                     
35                        
36                        
37                             
38                        
39                        
40                        
41                        
42                             
43                             
44                        
45                     
46                 
47            
48         
49     
50
51     
52         
53            
54                 
55                     
56                        
57                        
58                        
59                     
60                     
61                        
62                        
63                        
64                             
65                        
66                        
67                        
68                     
69                 
70            
71         
72     
View Code   窗口样式





1     
2         
3         
4         
5         
6         
7         
8         
9         
10         
11         
12            
13                 
14                     
15                        
16                             
17                                 
18                                 
19                             
20                             
21                             
22                                 
23                                    
24                                    
25                                 
26                                 
27                                    
28                                    
29                                    
30                                 
31                                 
32                             
33                             
34                                 
35                                     4
36                                     8
37                                    
38                                         
39                                             
40                                                
41                                                     
42                                                
43                                             
44                                         
45                                    
46                                 
47                                 
48                                 
49                                 
50                                 
51                                 
52                                 
53                                 
54                                 
55                                 
56                             
57                             
58                                 
59                                    
60                                 
61                             
62                        
63                     
64                     
65                        
66                             
67                                 
68                                 
69                             
70                             
71                        
72                        
73                             
74                             
75                             
76                        
77                        
78                             
79                             
80                             
81                             
82                        
83                        
84                             
85                             
86                             
87                             
88                        
89                     
90                 
91            
92         
93     
View Code   
  HeaderedWindwo.cs





  1 public class HeaderedWindow : Window
  2     {
  3         #region  模板中的部分控件名称
  4         private const string HeaderContainerName = "PART_HeaderContainer";
  5         private const string MinimizeButtonName = "PART_MinimizeButton";
  6         private const string RestoreButtonName = "PART_RestoreButton";
  7         private const string CloseButtonName = "PART_CloseButton";
  8         private const string TopResizerName = "PART_TopResizer";
  9         private const string LeftResizerName = "PART_LeftResizer";
10         private const string RightResizerName = "PART_RightResizer";
11         private const string BottomResizerName = "PART_BottomResizer";
12         private const string BottomRightResizerName = "PART_BottomRightResizer";
13         private const string TopRightResizerName = "PART_TopRightResizer";
14         private const string TopLeftResizerName = "PART_TopLeftResizer";
15         private const string BottomLeftResizerName = "PART_BottomLeftResizer";
16         #endregion
17
18         #region  依赖属性
19         public static readonly DependencyProperty ShowDefaultHeaderProperty =
20             DependencyProperty.Register("ShowDefaultHeader", typeof(bool), typeof(HeaderedWindow), new FrameworkPropertyMetadata(true));
21
22         public static readonly DependencyProperty ShowResizeGripProperty =
23             DependencyProperty.Register("ShowResizeGrip", typeof(bool), typeof(HeaderedWindow), new FrameworkPropertyMetadata(false));
24
25         public static readonly DependencyProperty CanResizeProperty =
26             DependencyProperty.Register("CanResize", typeof(bool), typeof(HeaderedWindow), new FrameworkPropertyMetadata(true));
27
28         public static readonly DependencyProperty HeaderProperty =
29             DependencyProperty.Register("Header", typeof(object), typeof(HeaderedWindow), new FrameworkPropertyMetadata(null, OnHeaderChanged));
30
31         public static readonly DependencyProperty HeaderTemplateProperty =
32             DependencyProperty.Register("HeaderTemplate", typeof(DataTemplate), typeof(HeaderedWindow), new FrameworkPropertyMetadata(null));
33
34         public static readonly DependencyProperty HeaderTempateSelectorProperty =
35             DependencyProperty.Register("HeaderTempateSelector", typeof(DataTemplateSelector), typeof(HeaderedWindow), new FrameworkPropertyMetadata(null));
36
37         public static readonly DependencyProperty IsFullScreenMaximizeProperty =
38             DependencyProperty.Register("IsFullScreenMaximize", typeof(bool), typeof(HeaderedWindow), new FrameworkPropertyMetadata(false));
39
40         private static void OnHeaderChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
41         {
42             HeaderedWindow win = sender as HeaderedWindow;
43             win.RemoveLogicalChild(e.OldValue);
44             win.AddLogicalChild(e.NewValue);
45         }
46
47         public bool ShowDefaultHeader
48         {
49             get { return (bool)GetValue(ShowDefaultHeaderProperty); }
50             set { SetValue(ShowDefaultHeaderProperty, value); }
51         }
52
53         public bool CanResize
54         {
55             get { return (bool)GetValue(CanResizeProperty); }
56             set { SetValue(CanResizeProperty, value); }
57         }
58
59         public bool ShowResizeGrip
60         {
61             get { return (bool)GetValue(ShowResizeGripProperty); }
62             set { SetValue(ShowResizeGripProperty, value); }
63         }
64
65         public object Header
66         {
67             get { return (object)GetValue(HeaderProperty); }
68             set { SetValue(HeaderProperty, value); }
69         }
70
71         public DataTemplate HeaderTemplate
72         {
73             get { return (DataTemplate)GetValue(HeaderTemplateProperty); }
74             set { SetValue(HeaderTemplateProperty, value); }
75         }
76
77         public DataTemplateSelector HeaderTempateSelector
78         {
79             get { return (DataTemplateSelector)GetValue(HeaderTempateSelectorProperty); }
80             set { SetValue(HeaderTempateSelectorProperty, value); }
81         }
82
83         public bool IsFullScreenMaximize
84         {
85             get { return (bool)GetValue(IsFullScreenMaximizeProperty); }
86             set { SetValue(IsFullScreenMaximizeProperty, value); }
87         }
88
89         #endregion
90
91         static HeaderedWindow()
92         {
93             DefaultStyleKeyProperty.OverrideMetadata(typeof(HeaderedWindow), new FrameworkPropertyMetadata(typeof(HeaderedWindow)));
94         }
95
96         #region  私有变量
97
98         private FrameworkElement headerContainer;
99         private Button minimizeButton;
100         private ToggleButton restoreButton;
101         private Button closeButton;
102         private Thumb topResizer;
103         private Thumb leftResizer;
104         private Thumb rightResizer;
105         private Thumb bottomResizer;
106         private Thumb bottomRightResizer;
107         private Thumb topRightResizer;
108         private Thumb topLeftResizer;
109         private Thumb bottomLeftResizer;
110         #endregion
111
112         #region 重写函数
113
114         public override void OnApplyTemplate()
115         {
116             base.OnApplyTemplate();
117             headerContainer = GetTemplateChild(HeaderContainerName);
118             headerContainer.MouseLeftButtonDown += HeaderContainerMouseLeftButtonDown;
119             closeButton = GetTemplateChild(CloseButtonName);
120             closeButton.Click += delegate { Close(); };
121             restoreButton = GetTemplateChild(RestoreButtonName);
122             restoreButton.Checked += delegate { ChangeWindowState(WindowState.Maximized); };
123             restoreButton.Unchecked += delegate { ChangeWindowState(WindowState.Normal); };
124             StateChanged += new EventHandler(HeaderedWindowStateChanged);
125             minimizeButton = GetTemplateChild(MinimizeButtonName);
126             minimizeButton.Click += delegate { ChangeWindowState(WindowState.Minimized); };
127             topResizer = GetTemplateChild(TopResizerName);
128             topResizer.DragDelta += new DragDeltaEventHandler(ResizeTop);
129             leftResizer = GetTemplateChild(LeftResizerName);
130             leftResizer.DragDelta += new DragDeltaEventHandler(ResizeLeft);
131             rightResizer = GetTemplateChild(RightResizerName);
132             rightResizer.DragDelta += new DragDeltaEventHandler(ResizeRight);
133             bottomResizer = GetTemplateChild(BottomResizerName);
134             bottomResizer.DragDelta += new DragDeltaEventHandler(ResizeBottom);
135             bottomRightResizer = GetTemplateChild(BottomRightResizerName);
136             bottomRightResizer.DragDelta += new DragDeltaEventHandler(ResizeBottomRight);
137             topRightResizer = GetTemplateChild(TopRightResizerName);
138             topRightResizer.DragDelta += new DragDeltaEventHandler(ResizeTopRight);
139             topLeftResizer = GetTemplateChild(TopLeftResizerName);
140             topLeftResizer.DragDelta += new DragDeltaEventHandler(ResizeTopLeft);
141             bottomLeftResizer = GetTemplateChild(BottomLeftResizerName);
142             bottomLeftResizer.DragDelta += new DragDeltaEventHandler(ResizeBottomLeft);
143         }
144         #endregion
145
146         #region 辅助函数
147
148         private T GetTemplateChild(string childName) where T : FrameworkElement
149         {
150             return (GetTemplateChild(childName) as T);
151         }
152
153         ///
154         /// 鼠标左键单击拖动标题栏,双击窗体状态变化(最大化和还原)
155         ///
156         ///
157         ///
158         private void HeaderContainerMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
159         {
160             if (e.ClickCount == 1)
161             {
162                 DragMove();
163             }
164             else
165             {
166                 ChangeWindowState(WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized);
167             }
168         }
169         ///
170         /// 改变窗体状态
171         ///
172         /// Maximized,Normal,Minimized
173         private void ChangeWindowState(WindowState state)
174         {
175             if (state == WindowState.Maximized)
176             {
177                 if (!IsFullScreenMaximize && IsLocationOnPrimaryScreen())
178                 {
179                     MaxHeight = SystemParameters.WorkArea.Height;
180                     MaxWidth = SystemParameters.WorkArea.Width;
181                 }
182                 else
183                 {
184                     MaxHeight = double.PositiveInfinity;
185                     MaxWidth = double.PositiveInfinity;
186                 }
187             }
188             WindowState = state;
189         }
190
191         private void HeaderedWindowStateChanged(object sender, EventArgs e)
192         {
193             if (WindowState == WindowState.Minimized)
194             {
195                 restoreButton.IsChecked = null;
196             }
197             else
198             {
199                 restoreButton.IsChecked = WindowState == WindowState.Maximized;
200             }
201         }
202         ///
203         /// 判断控件是否位于主显示器中
204         ///
205         ///
206         private bool IsLocationOnPrimaryScreen()
207         {
208             return Left < SystemParameters.PrimaryScreenWidth && Top < SystemParameters.PrimaryScreenHeight;
209         }
210
211         #endregion
212
213         #region  重置大小
214         private void ResizeBottomLeft(object sender, DragDeltaEventArgs e)
215         {
216             ResizeLeft(sender, e);
217             ResizeBottom(sender, e);
218         }
219
220         private void ResizeTopLeft(object sender, DragDeltaEventArgs e)
221         {
222             ResizeTop(sender, e);
223             ResizeLeft(sender, e);
224         }
225
226         private void ResizeTopRight(object sender, DragDeltaEventArgs e)
227         {
228             ResizeRight(sender, e);
229             ResizeTop(sender, e);
230         }
231
232         private void ResizeBottomRight(object sender, DragDeltaEventArgs e)
233         {
234             ResizeBottom(sender, e);
235             ResizeRight(sender, e);
236         }
237
238         private void ResizeBottom(object sender, DragDeltaEventArgs e)
239         {
240             if (ActualHeight

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-62842-1-1.html 上篇帖子: 找回Win8.1(windows server 2012 R2)的双拼 下篇帖子: Windows Server 2012 不支持SharePoint Server 2010(KB2724471)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表