即使设置了 WindowChrome 也会出现默认标题栏

Posted

技术标签:

【中文标题】即使设置了 WindowChrome 也会出现默认标题栏【英文标题】:Default Title bar appearing even with WindowChrome set 【发布时间】:2021-08-25 10:33:48 【问题描述】:

我正在使用 WindowChrome,并自定义了我的应用程序的边框和标题栏,它在大多数情况下都可以正常工作:

但是,由于某种原因,当我在某个虚拟机(在本例中是使用 VMware 的德语)上运行时,会出现一个白色边框和标题栏(尽管没有标题),并覆盖我的自定义标题栏:

奇怪的是,我曾尝试使用 Snoop 检查应用程序,即使在 VM 上,Snoop 似乎也不承认存在此栏。例如将鼠标悬停在不同的 WPF 组件上,如果我使用 Snoop 的“放大”功能,标题栏会正确显示!

这个标题栏可能来自哪里以及如何摆脱它?

下面是一个简单应用程序的 XAML 代码,它表现出同样的问题:

<Window x:Class="XamlMessing.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:XamlMessing"
    mc:Ignorable="d"
    Title="MainWindow" Height="298" Width="399" Background="#FF590B0B">

<Window.Resources>

    <WindowChrome x:Key="MyWindowChrome">
        <WindowChrome.CaptionHeight>48</WindowChrome.CaptionHeight>
    </WindowChrome>

    <Style x:Key="MyWindowStyle" TargetType="x:Type Window" BasedOn="StaticResource x:Type Window">
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="ResizeMode" Value="NoResize" />
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <Setter Property="UseLayoutRounding" Value="True" />
        <Setter Property="TextOptions.TextFormattingMode" Value="Display" />
        <Setter Property="WindowState" Value="Normal" />
        <Setter Property="WindowStyle" Value="SingleBorderWindow" />
        <Setter Property="WindowChrome.WindowChrome" Value="StaticResource MyWindowChrome"/>
    </Style>
    
</Window.Resources>

<Window.Style>
    <StaticResource ResourceKey="MyWindowStyle"/>
</Window.Style>

<Grid Margin="0,0,81,107">
    <TextBlock HorizontalAlignment="Left" Margin="125,89,0,0" TextWrapping="Wrap" Text="Hello, World" VerticalAlignment="Top" Height="61" Width="175" FontSize="24" Foreground="#FFDAE463"/>
</Grid>
</Window>

【问题讨论】:

【参考方案1】:

好的,它似乎可以通过设置来修复...

<WindowChrome.GlassFrameThickness>0</WindowChrome.GlassFrameThickness>

但我仍然想知道是什么导致它首先出现,因为除了 VM 之外的设备不需要该设置...

【讨论】:

以上是关于即使设置了 WindowChrome 也会出现默认标题栏的主要内容,如果未能解决你的问题,请参考以下文章

Spring CSRF:即使在设置请求标头后,Ajax 也会出现 403 错误

有没有办法设置一个选项,即使有错误也会导致 PostgreSQL 脚本继续?

即使设置正确,Gradle 也会发现错误的 JAVA_HOME

C# WPF通过WindowChrome自定义窗体

iphone - 即使禁用推送通知也会出现

即使似乎授予访问权限,Google Calendar API在OAuth期间也会出现403错误