【问题标题】:How to remove white strip on top of WPF window with WindowStyle=None?如何使用 WindowStyle=None 删除 WPF 窗口顶部的白色条带?
【发布时间】:2016-04-14 18:28:47
【问题描述】:

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

【问题讨论】:

  • 我在可视化树中看不到任何导致这种情况的东西,但我可以在 Windows 10 上重现它。我想知道在以前的 Windows 版本中是否也会发生这种情况。可能是由于窗口布局和边框的处理方式不同而引入的一个错误。

标签: wpf


【解决方案1】:

您看到的白色是重新调整大小的边框。您可以通过设置 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();
}

【讨论】:

  • 试试这个,好像不能真正移动窗口,只能从右下角调整大小,所以会大大削弱调整大小的能力。不过,也许这就是 OP 所需要的。
  • 很抱歉,我忘了提到我不能使用 AllowsTransparency="True",因为我的 WPF 窗口呈现 Windows 窗体控件。托管在 WPF 窗口上的 Windows 窗体不显示(请参阅其他线程)。
【解决方案2】:

这几天我一直在寻找解决方案,简单来说,this 链接就是我的疑问的答案

虽然实现魔法的代码 sn-p 是:

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

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

希望有所帮助:)

【讨论】:

  • 这个选项可以创造奇迹。仅设置标题高度会导致绘画问题,您可以在调整大小时看到标题出现。这种组合目前完美无缺,您仍然可以获得完整的调整大小功能。
【解决方案3】:

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

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

【讨论】:

  • 这是正确的解决方案,因为我们不想松散窗口默认阴影效果,当应用AllowsTransparency=True 时会丢失。谢谢!
  • 此解决方案比其他解决方案使用更少的代码,并创建所需的结果而没有副作用。
【解决方案4】:

我添加了这段代码:

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

&lt;Window&gt; paste here &lt;Window/&gt; 里面,它帮助了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2010-12-15
    • 2019-06-16
    • 2011-02-25
    • 2023-02-26
    • 2010-12-06
    • 2013-04-13
    相关资源
    最近更新 更多