vis*_*hal 6 .net c# wpf maximize-window windows-11
我有一个使用自定义最大化/恢复按钮的 WPF 应用程序。在 Windows 11 中,鼠标悬停在最大化/恢复按钮上不会弹出捕捉布局功能,如下所示:
有人知道解决这个问题吗?好心提醒。
蒂亚!
在这里您可以找到有关此主题的广泛讨论
https://github.com/dotnet/wpf/issues/4825
包括一些工作代码:
https://github.com/ghost1372/HandyControls/commit/41fce1df04b45ab9a7a8ebad33f3810a89a1ad13
然而,在我看来,对于可以通过按键盘上的Win + Z键轻松显示的快照菜单来说,处理太多了。
这是我仅在 XAML 中提出的解决方案。我没有使用边框来保存按钮的内容,而是在中心的标志周围创建了一条路径。标志内的区域将显示捕捉菜单,因为它没有设置“填充”,这意味着鼠标光标将点击该区域上的 WindowChrome。下面是样式和结果。你明白了。它并不完美,但总比没有好。
<Style x:Key="TitleBarMaximizeButtonStyle" TargetType="Button">
<Setter Property="Foreground" Value="{DynamicResource WindowTextBrush}"/>
<Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True"/>
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Path x:Name="p" Width="46" Height="32" ClipToBounds="True" StrokeThickness="0" Stretch="Uniform" Data="M 0,0 45,0 45,31 0,31 Z M 18,11 28,11 28,21 18,21 Z" Fill="Transparent"/>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Focusable="False"/>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsActive, RelativeSource={RelativeSource AncestorType=Window}}" Value="False">
<Setter Property="Foreground" Value="{DynamicResource WindowTitleBarInactiveText}"/>
</DataTrigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="p" Property="Fill" Value="{DynamicResource MouseOverOverlayBackgroundBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="p" Property="Fill" Value="{DynamicResource MousePressedOverlayBackgroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)