WPF Aero Glass Window

简介: 原文:WPF Aero Glass Window 用法 Win7 DwmSetWindowAttribute function Win10 SetWindowCompositionAttribute 代码 1 using System; 2 using System.
原文: WPF Aero Glass Window

  1. 用法

    1. Win7 DwmSetWindowAttribute function
    2. Win10 SetWindowCompositionAttribute
  2. 代码
    1.   1 using System;
        2 using System.Collections.Generic;
        3 using System.Linq;
        4 using System.Runtime.InteropServices;
        5 using System.Text;
        6 using System.Threading.Tasks;
        7 using System.Windows;
        8 using System.Windows.Interop;
        9 
       10 namespace AeroWindow
       11 {
       12     internal static class NativeMethods
       13     {
       14         [DllImport("user32.dll")]
       15         internal static extern int SetWindowCompositionAttribute(IntPtr hwnd, ref WindowCompositionAttribData data);
       16 
       17         [StructLayout(LayoutKind.Sequential)]
       18         internal struct WindowCompositionAttribData
       19         {
       20             public WindowCompositionAttribute Attribute;
       21             public IntPtr Data;
       22             public int SizeOfData;
       23         }
       24 
       25         [StructLayout(LayoutKind.Sequential)]
       26         internal struct AccentPolicy
       27         {
       28             public AccentState AccentState;
       29             public AccentFlags AccentFlags;
       30             public int GradientColor;
       31             public int AnimationId;
       32         }
       33 
       34         [Flags]
       35         internal enum AccentFlags
       36         {
       37             // ... 
       38             DrawLeftBorder = 0x20,
       39             DrawTopBorder = 0x40,
       40             DrawRightBorder = 0x80,
       41             DrawBottomBorder = 0x100,
       42             DrawAllBorders = (DrawLeftBorder | DrawTopBorder | DrawRightBorder | DrawBottomBorder)
       43             // ... 
       44         }
       45 
       46         internal enum WindowCompositionAttribute
       47         {
       48             // ... 
       49             WCA_ACCENT_POLICY = 19
       50             // ... 
       51         }
       52 
       53         internal enum AccentState
       54         {
       55             ACCENT_DISABLED = 0,
       56             ACCENT_ENABLE_GRADIENT = 1,
       57             ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
       58             ACCENT_ENABLE_BLURBEHIND = 3,
       59             ACCENT_INVALID_STATE = 4
       60         }
       61 
       62         public static void EnableBlur(this Window window)
       63         {
       64             if (SystemParameters.HighContrast)
       65             {
       66                 return; // Blur is not useful in high contrast mode 
       67             }
       68             SetAccentPolicy(window, NativeMethods.AccentState.ACCENT_ENABLE_BLURBEHIND);
       69         }
       70 
       71 
       72         public static void DisableBlur(this Window window)
       73         {
       74             SetAccentPolicy(window, NativeMethods.AccentState.ACCENT_DISABLED);
       75         }
       76 
       77         private static void SetAccentPolicy(Window window, NativeMethods.AccentState accentState)
       78         {
       79             var windowHelper = new WindowInteropHelper(window);
       80             var accent = new NativeMethods.AccentPolicy
       81             {
       82                 AccentState = accentState,
       83                 AccentFlags = GetAccentFlagsForTaskbarPosition(),
       84                   AnimationId = 2
       85             };
       86             var accentStructSize = Marshal.SizeOf(accent);
       87             var accentPtr = Marshal.AllocHGlobal(accentStructSize);
       88             Marshal.StructureToPtr(accent, accentPtr, false);
       89             var data = new NativeMethods.WindowCompositionAttribData
       90             {
       91                 Attribute = NativeMethods.WindowCompositionAttribute.WCA_ACCENT_POLICY,
       92                 SizeOfData = accentStructSize,
       93                 Data = accentPtr
       94             };
       95             NativeMethods.SetWindowCompositionAttribute(windowHelper.Handle, ref data);
       96             Marshal.FreeHGlobal(accentPtr);
       97         }
       98 
       99         private static NativeMethods.AccentFlags GetAccentFlagsForTaskbarPosition()
      100         {
      101             return NativeMethods.AccentFlags.DrawAllBorders;
      102         }
      103     }
      104  }

       

       1  public MainWindow()
       2         {
       3             RoutedEventHandler handler = null;
       4             handler = (s, e) =>
       5             {
       6                 Loaded -= handler;
       7                 this.EnableBlur();
       8             };
       9             Loaded += handler;
      10 
      11             InitializeComponent();
      12         }
       1 <Window x:Class="AeroWindow.MainWindow"
       2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
       5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       6         xmlns:shell="http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell"
       7         xmlns:local="clr-namespace:AeroWindow"
       8         mc:Ignorable="d" 
       9         Background="#44E6ECF0" 
      10         Title="MainWindow" Height="600" Width="800" >
      11     <shell:WindowChrome.WindowChrome>
      12         <shell:WindowChrome GlassFrameThickness="1" UseAeroCaptionButtons="False"  NonClientFrameEdges="None"  CornerRadius="10" CaptionHeight="600"   />
      13     </shell:WindowChrome.WindowChrome>
      14     <Grid/>
      15 </Window>

       

  3. 效果

  

 

目录
相关文章
|
前端开发 C#
WPF MVVM中在ViewModel中关闭或者打开Window
原文:WPF MVVM中在ViewModel中关闭或者打开Window 这篇博客将介绍在MVVM模式ViewModel中关闭和打开View的方法。 1. ViewModel中关闭View public class MainViewModel { publi...
3299 0
|
人工智能 C#
WPF自定义控件库之Window窗口
本文以自定义窗口为例,简述WPF开发中如何通过自定义控件来扩展功能和样式,仅供学习分享使用,如有不足之处,还请指正。
241 5
|
6月前
|
数据可视化 API C#
|
C#
WPF技术之Xaml Window
WPF Window 是一个 WPF 窗口类,它具有许多属性枚举可以控制窗口的外观和行为。
126 0
WPF技术之Xaml Window
|
API C# Windows
一起谈.NET技术,WPF 扩展玻璃效果(Aero Glass)
  Windows 7 操作系统默认具有一款玻璃效果主题(Aero Glass)。如果选择了该款主题,所有的应用程序标题栏都会处于玻璃透明效果(如下图)。这个功能是由Desktop Window Manager(DWM)服务支持的。
1366 0
|
C#
WPF自定义Window窗体样式
原文:WPF自定义Window窗体样式 资源文件代码: ...
2561 0
|
前端开发 C#
使用MVVM DataTriggers在WPF XAML视图之间切换/Window窗口自适应内容大小并居中
原文 使用MVVM DataTriggers在WPF XAML视图之间切换 相关文章: http://www.technical-recipes.com/2016/switching-between-wpf-xaml-views-using-mvvm-datatemplate/ 这篇文章解决了能够根据ViewModel类的属性在不同视图之间切换的问题。
1870 0
|
前端开发 C# 容器
WPF应用程序顶级标签一定是Window吗?
原文:WPF应用程序顶级标签一定是Window吗? WPF应用程序顶级标签一定是Window吗? 很多人误以为是。可是,答案却是否定的。
795 0
|
C#
WPF一步步实现完全无边框自定义Window(附源码)
原文:WPF一步步实现完全无边框自定义Window(附源码)    在我们设计一个软件的时候,有很多时候我们需要按照美工的设计来重新设计整个版面,这当然包括主窗体,因为WPF为我们提供了强大的模板的特性,这就为我们自定义各种空间提供了可能性,这篇博客主要用来介绍如何自定义自己的Window,在介绍整个写作思路之前,我们来看看最终的效果。
1294 0
|
C#
WPF Touch操作滚动条,Window弹跳
原文:WPF Touch操作滚动条,Window弹跳 WPF,用ScrollViewer控件,触屏开发,当滑动到最后时会使整个窗体弹跳一下 原因是因为ScrollViewer触屏操作原生支持惯性,ScrollViewer中的内容滚动到边界是会自动触发Window Bounce(窗体弹跳), 以叫做Panning Feedback(拖动回馈)。
1173 0