WPF 无界面方案
第一步,设置窗体
WindowStyle="None" ResizeMode="CanMinimize" Loaded="Window_Loaded" WindowChrome.WindowChrome="{DynamicResource WindowChromeKey}" MouseLeftButtonDown="Window_MouseLeftButtonDown" WindowStartupLocation="CenterScreen"
<Window.Resources>
<WindowChrome x:Key="WindowChromeKey">
<WindowChrome.ResizeBorderThickness>
<Thickness>0</Thickness>
</WindowChrome.ResizeBorderThickness>
</WindowChrome>
</Window.Resources>
第二步,在窗体顶部按钮属性上写
<Button Grid.ColumnSpan="2" WindowChrome.IsHitTestVisibleInChrome="True" />
完整示例
<Window x:Class="BeehijemwaboHaihafobe.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BeehijemwaboHaihafobe"
mc:Ignorable="d"
Title="MainWindow" WindowStyle="None" Height="450" Width="800">
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="20" />
</WindowChrome.WindowChrome>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.ColumnSpan="2" WindowChrome.IsHitTestVisibleInChrome="True" />
<Button IsEnabled="False" />
</Grid>
</Window>
在 WPF 里面,默认标题栏的交互相对复杂,如按钮没有设置 WindowChrome.IsHitTestVisibleInChrome 属性为 True 那按钮是拿不到点击事件的。
本文来告诉大家按钮 Button 的 IsEnabled 属性对 WindowChrome 的 IsHitTestVisibleInChrome 的影响
在 WPF 中的默认交互是点击标题栏的时候,如果是双击标题栏,那么将会进入最大化窗口。而如果在标题栏放一个按钮,此时按钮默认是没有收到点击的,详细请看 WPF 非客户区的触摸和鼠标点击响应,如果想要让按钮能收到点击,需要使用 WPF 非客户区的触摸和鼠标点击响应 的方法,让 WPF 的按钮加上 WindowChrome.IsHitTestVisibleInChrome 属性
此时点击按钮的时候,如果是在标题栏的地方,是让按钮收到点击。此时双击标题栏的按钮不会让窗口最大化,但如果此时的按钮设置 IsEnabled="False" 那么此时双击将依然让窗口最大化
而有趣的是如果在按钮 A 设置了 WindowChrome.IsHitTestVisibleInChrome 属性为 True 同时 IsEnabled="True" 然后在按钮 A 上方再放一个按钮 B 设置 IsEnabled="False" 那么此时双击将依然让窗口最大化

浙公网安备 33010602011771号