该应用程序具有标准的最小化和关闭按钮。但他们不适合我。您需要制作自己的按钮。设置任务以制作具有透明背景的按钮。
应该是这样的:
当光标悬停时,背景颜色和图标发生变化:
开始做这样的实施:
<Window x:Class="ProgramProject.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:ProgramProject"
mc:Ignorable="d"
Title="MainWindow" Height="421" Width="425" ResizeMode="NoResize" Background="{x:Null}" WindowStyle="None">
<Grid>
<Border CornerRadius="12">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#2e75b6" Offset="0.5" />
<GradientStop Color="#1f4e79" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
<Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="60" Stroke="Black" Opacity="0" VerticalAlignment="Top" Width="425" MouseLeftButtonDown="Rectangle1_PreviewMouseLeftButtonDown">
<Grid Height="20" Margin="382,10,23,0" VerticalAlignment="Top" MouseDown="Grid1_MouseDown" >
<Button Opacity="0" Content="" HorizontalAlignment="Left" Margin="-13,-10,-12,-8" VerticalAlignment="Top" Width="45" Height="38"/>
<Path Stretch="Fill" Fill="#FFFFFF" Data="F1 M 25.9166,22.1667L 37.9999,33.25L 49.0832,22.1668L 53.8332,26.9168L 42.7499,38L 53.8332,49.0834L 49.0833,53.8334L 37.9999,42.75L 26.9166,53.8334L 22.1666,49.0833L 33.25,38L 22.1667,26.9167L 26.9166,22.1667 Z " Margin="3.5,3.5,3.5,4.5"/>
</Grid>
</Grid>
</Window>
但是,由于我是 wpf 的新手,所以我有几个问题:
- 有没有比用代码画十字和棍子更简单的方法呢?也许这些按钮已经存在?
- 如何一次对 2 个对象执行样式更改?Internet 上有更改悬停按钮背景颜色的示例,但这些示例是悬停在按钮上的。在我的例子中,悬停可以触摸到按钮上的图标,而不是指针将在按钮后面的事实。
- 我做得对吗?将按钮和图标放在网格中?
我不希望任何人做出现成的示例(尽管我真的很感激一种实现的简单方法)。对我来说最主要的是被推上正确的道路,解释问题。


首先,一切都不是更简单,而是更困难。
如果你只是绘制按钮,那么它们就不会落入非客户区。因此,您必须将它们放在那里使用
WindowChrome,例如,如这个问题中所述:WPF Creating a Custom Window Style with Shadow。然后,关于画十字。没有,WPF中没有内置的十字,因为每个系统都不一样(看看在Windows 7上的样子,在Windows 10上的样子),也取决于系统设置(选择配色方案,启用或不缩放模式和/或增加对比度等)。一条手绘十字线并不是太难的要求。
我仍然会在按钮内打叉,然后更改模板:
Offtopic:根据代码判断,您通过可视化编辑器编写 XAML。这会导致相当次优的代码,并将布局管理器排除在游戏之外。(例如,你在屏幕上放置一个按钮,结构如
Margin="382,10,23,0"。不要这样做,手动使用布局管理器。)