如何支持Windows 11“对齐布局”到WPF中的自定义最大化/恢复按钮?

vis*_*hal 6 .net c# wpf maximize-window windows-11

我有一个使用自定义最大化/恢复按钮的 WPF 应用程序。在 Windows 11 中,鼠标悬停在最大化/恢复按钮上不会弹出捕捉布局功能,如下所示:

在此输入图像描述

有人知道解决这个问题吗?好心提醒。

蒂亚!

Ale*_*icu 0

在这里您可以找到有关此主题的广泛讨论

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)

快照菜单 WPF