Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Win32+;WPF具有系统菜单的可调整大小的无边框窗口_C#_Wpf_Winapi - Fatal编程技术网

C# Win32+;WPF具有系统菜单的可调整大小的无边框窗口

C# Win32+;WPF具有系统菜单的可调整大小的无边框窗口,c#,wpf,winapi,C#,Wpf,Winapi,我在WPF中有一个(NoResize Borderless)窗口,我正在尝试使其具有相当大的规模,但仍然可以使用系统菜单。 我已经手动进行了NC hittesting,以启用大小调整和系统菜单。然而,我一次只能让一个人工作。我尝试使用SetWindowLong(Ptr)启用这两种功能,但无法获得任何组合来启用系统菜单和调整大小。 我已经尝试过启用WS\u SYSMENU样式,这没有什么区别 PostMessage(callingWindow, WindowMessage.SystemComman

我在WPF中有一个(NoResize Borderless)窗口,我正在尝试使其具有相当大的规模,但仍然可以使用系统菜单。 我已经手动进行了NC hittesting,以启用大小调整和系统菜单。然而,我一次只能让一个人工作。我尝试使用SetWindowLong(Ptr)启用这两种功能,但无法获得任何组合来启用系统菜单和调整大小。 我已经尝试过启用
WS\u SYSMENU
样式,这没有什么区别

PostMessage(callingWindow, WindowMessage.SystemCommand, new IntPtr(trackPMenu), IntPtr.Zero);
仅当窗口无法调整大小时才起作用。
另外,将窗口设置为重叠窗口(
WS\u OVERLAPPEDWINDOW
)会在窗口周围放置一个框架。

OSS项目能够使用系统菜单创建一个不可调整大小的无边框窗口。看一看那边的MetroWindow教室

我目前正在使用一个带有系统菜单的可调整大小的无边框窗口:

代码隐藏:

using MahApps.Metro.Controls;

public partial class MainWindow : MetroWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }
}
XAML:


使用以下样式:

<Style x:Key="MyCleanWindowStyleKey"
       TargetType="{x:Type c:MetroWindow}">
    <Setter Property="BorderThickness"
            Value="2" />
    <Setter Property="BorderBrush"
            Value="Blue" />
    <Setter Property="Background"
            Value="Black" />
    <Setter Property="Foreground"
            Value="White" />
    <Setter Property="TitleForeground"
            Value="White" />
    <Setter Property="TitlebarHeight"
            Value="42" />
    <Setter Property="WindowState"
            Value="Normal" />
    <Setter Property="ResizeMode"
            Value="CanResizeWithGrip" />
    <Setter Property="AllowsTransparency"
            Value="False" />
    <Setter Property="TitleCaps"
            Value="False" />
    <Setter Property="ShowWindowCommandsOnTop"
            Value="False" />
    <Setter Property="WindowTransitionsEnabled"
            Value="False" />
</Style>


Hmm,看看它的源代码,它似乎通过本机互操作(包括创建)完成了大部分窗口工作,这对你来说是个问题吗?不,只是好奇它是如何完成的
<Style x:Key="MyCleanWindowStyleKey"
       TargetType="{x:Type c:MetroWindow}">
    <Setter Property="BorderThickness"
            Value="2" />
    <Setter Property="BorderBrush"
            Value="Blue" />
    <Setter Property="Background"
            Value="Black" />
    <Setter Property="Foreground"
            Value="White" />
    <Setter Property="TitleForeground"
            Value="White" />
    <Setter Property="TitlebarHeight"
            Value="42" />
    <Setter Property="WindowState"
            Value="Normal" />
    <Setter Property="ResizeMode"
            Value="CanResizeWithGrip" />
    <Setter Property="AllowsTransparency"
            Value="False" />
    <Setter Property="TitleCaps"
            Value="False" />
    <Setter Property="ShowWindowCommandsOnTop"
            Value="False" />
    <Setter Property="WindowTransitionsEnabled"
            Value="False" />
</Style>