为什么WPF多了space?

Why is there extra space on WPF?

这是在 XAML Designer

预计:

实际:

这是我的 window 的 XAML:

<Window
    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:WpfApp2"
    xmlns:Wpf="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" x:Class="WpfApp2.MainWindow"
    mc:Ignorable="d"
    ResizeMode="NoResize"
    Title="MainWindow" SizeToContent="WidthAndHeight" AllowsTransparency="True" WindowStyle="None" Loaded="Window_Loaded">
<StackPanel>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
        <StackPanel.Resources>
            <Style TargetType="Button">
                <Setter Property="Margin" Value="5, 0, 5, 0"></Setter>
                <Setter Property="Height" Value="30"></Setter>
            </Style>
        </StackPanel.Resources>
        <Button>测试</Button>
        <Button>测试</Button>
        <Button>测试</Button>
    </StackPanel>
    <Canvas Height="2" Background="Red" />
</StackPanel>

window周围有多余的space。

我发现只要高度小于40,就会有多余的space.But我没有设置minHeight

这是我的 app.xaml:

<Application x:Class="WpfApp2.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:WpfApp2"
         StartupUri="MainWindow.xaml">
<Application.Resources>
     
</Application.Resources>

我的环境信息:

Windows11

Visual Studio 2022

.net 框架 4.8

在 WPF 中 SizeToContent 不能很好地与 WindowStyle=None 一起使用。在最初绘制 Window.

时,渲染器似乎仍在考虑 non-existant 边框

克服此问题的简单技巧:在 Window 上设置 Height="1" 以强制其初始大小小于最终大小。然后当呈现内容时,SizeToContent="WidthAndHeight" 将导致 window 将自身调整为正确的大小。