zoukankan      html  css  js  c++  java
  • WPF中使用WindowChrome自定义窗口中遇到的最大化问题

    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   }

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

  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/3Tai/p/9209988.html
Copyright © 2011-2022 走看看