如何在 WindowStyle=None 的情况下删除 WPF 窗口顶部的白色条带?

问题描述 投票:0回答:5

是否可以在 Window Style=None 的情况下删除 WPF 窗口顶部的白色条带。 XAML 和 Window 如屏幕截图所示:

wpf
5个回答
47
投票

您看到的白色是调整大小的边框。您可以删除它,但仍然可以通过设置

ResizeMode="CanResizeWithGrip" AllowsTransparency="True"

来调整窗口大小

如果您根本不想调整大小,请执行此操作 -

ResizeMode="NoResize"
,您将再次看不到边框,但无法调整大小。

<Window x:Class="HandsOnSolution.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Background="Green" WindowStyle="None" ResizeMode="CanResizeWithGrip" AllowsTransparency="True">
    <Grid>
    </Grid>
</Window>

编辑

@devuxer 的好点,如果您对拖动感兴趣,可以将这段代码添加到窗口鼠标按下事件中

<Window MouseLeftButtonDown="Window_MouseLeftButtonDown"/>

//code behind
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    DragMove();
}

23
投票

我几天来一直在寻找解决方案,简单来说这个链接包含了我的疑问的答案

尽管发挥魔力的代码片段是:

<Setter Property="WindowChrome.WindowChrome">
    <Setter.Value>
        <WindowChrome CaptionHeight="0"
            CornerRadius="2"
            GlassFrameThickness="0"
            NonClientFrameEdges="None"
            ResizeBorderThickness="3"/>
    </Setter.Value>
</Setter>

我刚刚将上述属性设置器添加到自定义窗口样式中。

希望有帮助:)


19
投票

非常简化的代码,仅作用于一个属性:

<WindowChrome.WindowChrome>
    <WindowChrome CaptionHeight="0"/>
</WindowChrome.WindowChrome>

8
投票

我添加了这段代码:

<WindowChrome.WindowChrome>
    <WindowChrome GlassFrameThickness="0,0,0,1" CornerRadius="0" />
</WindowChrome.WindowChrome>

里面

<Window> paste here <Window/>
它有帮助:)


0
投票

这是我解决这个问题的方法。它在 Windows 10 上运行良好,我还没有在其他系统上测试过。

正如之前的作者所指出的,使用

WindowChrome
修复了顶栏问题。但是,它反而引入了其他问题(我将解释并链接到下面这些问题的修复程序)。这是我添加到我的
WindowChrome
中的
MainWindow.xaml
代码,但请随意尝试:

<WindowChrome.WindowChrome>
    <WindowChrome CaptionHeight="0"
                  CornerRadius="3"
                  GlassFrameThickness="0"
                  NonClientFrameEdges="None"
                  ResizeBorderThickness="6"
                  UseAeroCaptionButtons="False" />
</WindowChrome.WindowChrome>

有了

WindowChrome
,新的问题现在是最大化窗口。由于
WindowStyle="None"
删除了标题栏,我假设您(像我一样)已经制作了一些用于最小化、最大化和关闭程序的自定义按钮。为了最大化,很自然地使用
this.WindowState = System.Windows.WindowState.Maximized;
(假设
this
指的是主窗口)。但是,如果您这样做,最大化的窗口现在会通过将其延伸到屏幕之外来进行裁剪,并且还会覆盖任务栏(根据不同因素位于上方或下方)。所以基本上这一切都非常丑陋。不要这样做!

我的解决方案是改编一段精彩的代码——由 Alexander Yashyn 改编和共享,最初来自 Mike Weinhardt——您可以在这里找到: https://stackoverflow.com/a/67228878/5163713

这段代码根据程序当前所在的特定屏幕手动最大化窗口,而且看起来效果很好。我发现的唯一的小问题是,当您从最大化状态返回时,窗口始终位于屏幕的左上角。不过,我将让您保存窗口的最后位置并将其返回那里。快乐编码!

PS。我对微软感到失望,微软只是决定在 2022 年将问题标记为“已解决”,而没有真正解决顶部边框的根本问题。

© www.soinside.com 2019 - 2024. All rights reserved.