如何实现WPF无边框窗口,同时保留拖动、阴影等默认效果?

摘要:使用 WindowStyle="None" AllowsTransparency="True" 的方式达成无边
使用WindowStyle="None" AllowsTransparency="True" 的方式达成无边框的效果有很多无法忽视的缺陷,比如失去了拖动效果、双击全屏、阴影等。 使用WindowChrome 可以避免这些缺陷,在需要无边框的窗口使用: 1、 <WindowChrome.WindowChrome> <WindowChrome CaptionHeight="44" GlassFrameThickness="-1" UseAeroCaptionButtons="False"/> </WindowChrome.WindowChrome> 其中CaptionHeight 是标题栏的高度,其值可根据需求定义,这里定义为44像素。其中道理可参考: WPF 使用 WindowChrome,在自定义窗口标题栏的同时最大程度保留原生窗口样式(类似 UWP/Chrome) 2、控件与上述标题重合时,默认无法相应点击事件,在控件中添加下述代码修改此行为: WindowChrome.IsHitTestVisibleInChrome="True" IsHitTestVisibleInChrome 可继承,比如在一个Grid将IsHitTestVisibleInChrome属性设置为真,其子元素该属性均为真。 可参考:WPF 按钮 Button 的 IsEnabled 属性对 WindowChrome 的 IsHitTestVisibleInChrome 的影响 3、使用此方法,全屏时边缘将丢失几个像素!在windows10上这个数值是7,我通过定制一个WinRootPanelStyle样式消除该影响,每一个窗口的根Panel应用该样式: <Style TargetType="{x:Type Panel}" x:Key="WinRootPanelStyle"> <Setter Property="Margin" Value="0" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=WindowState}" Value="Maximized"> <Setter Property="Margin" Value="7" /> </DataTrigger> </Style.Triggers> </Style> 在窗口根Panel应用它,就像这样: <Grid Style="{StaticResource WinRootPanelStyle}"> </Grid> 问题解决,欢迎谈论。