WPF技巧大全:[2]Aero Glass 效果

时间:2026-02-14 18:20:30

1、打开VS,新建“WPF应用程序”项目,VB.NET/C#均可,VS12起C++也可以。

(本例用的是VB.NET,马上就会更新C#版)

WPF技巧大全:[2]Aero Glass 效果

2、 创建一个类AeroGlassHelper,用于协助将Aero Glass扩展到窗口中。

3、添加以下API声明,其中Margins是一个辅助结构,待会会定义。

WPF技巧大全:[2]Aero Glass 效果

4、创建扩展Aero Glass的函数

WPF技巧大全:[2]Aero Glass 效果

5、创建辅助结构,至此用来扩展的对象已经写完。

WPF技巧大全:[2]Aero Glass 效果

6、下面创建一个继承自Window的类ExtendAeroGlassWindow,

分别写初始化过程、创建WinProc消息处理函数(WPF没有该函数)以及获取或设置窗口各边要扩展Aero Glass的宽度的属性。

 Public Class ExtendAeroGlassWindow

        Inherits System.Windows.Window

        Private Const WM_DWMCOMPOSITIONCHANGED As Integer = &H31E

        Protected Overrides Sub OnSourceInitialized(e As EventArgs)

            MyBase.OnSourceInitialized(e)

            Try

                AeroGlassHelper.ExtendGlassFrame(Me, ExtendGlassFrameWidth)

                Dim h As New WindowInteropHelper(Me)

                Dim hwnd = h.Handle

                HwndSource.FromHwnd(hwnd).AddHook(New HwndSourceHook(AddressOf WndProc))

            Catch ex As Exception

            End Try

        End Sub

        Private Function WndProc(hwnd As IntPtr, msg As Integer, wParam As IntPtr,

                            lParam As IntPtr, ByRef handled As Boolean) As IntPtr

            If msg = WM_DWMCOMPOSITIONCHANGED Then

                Try

                    AeroGlassHelper.ExtendGlassFrame(Me, ExtendGlassFrameWidth)

                    handled = True

                Catch ex As Exception

                End Try

            End If

            Return IntPtr.Zero

        End Function

        Protected Friend _ExtendGlassFrameWidth As Thickness = New Thickness(-1)

        ''' <summary>

        ''' 获取或设置窗口各边要扩展Aero Glass的宽度。

        ''' </summary>

        ''' <value></value>

        ''' <returns>

        ''' 一个Thickness对象,描述窗体周围框架的粗细。

        ''' </returns>

        ''' <remarks></remarks>

        Public Property ExtendGlassFrameWidth() As Thickness

            Get

                Return _ExtendGlassFrameWidth

            End Get

            Set(value As Thickness)

                Try

                    AeroGlassHelper.ExtendGlassFrame(Me, value)

                Catch ex As Exception

                    Exit Property

                End Try

                _ExtendGlassFrameWidth = value

            End Set

        End Property

    End Class

7、大功告成!以后XAML定义的窗体就从ExtendAeroGlassWindow而不是Window创建。

© 2026 海能知识库
信息来自网络 所有数据仅供参考
有疑问请联系站长 site.kefu@gmail.com