我在WPF中有一个(NoResize Borderless)窗口,我试图让它有大小但仍然有系统菜单工作。
我手动完成了NC hittesting以启用调整大小和系统菜单。但是,我一次只能上班。我尝试使用SetWindowLong(Ptr)启用两者,但我无法获得任何组合来启用系统菜单和调整大小。
我已经尝试启用WS_SYSMENU
样式,这没有任何区别。
PostMessage(callingWindow, WindowMessage.SystemCommand, new IntPtr(trackPMenu), IntPtr.Zero);
仅在窗口无法调整大小时才有效
此外,将窗口设置为重叠窗口(WS_OVERLAPPEDWINDOW
)会在窗口周围放置一个框架。
答案 0 :(得分:1)
MahApps OSS项目能够使用系统菜单创建无可调整大小的无边界窗口。看看MetroWindow上课。
我目前正在使用带有系统菜单的可调整大小的无边框窗口:
代码背后:
using MahApps.Metro.Controls;
public partial class MainWindow : MetroWindow
{
public MainWindow()
{
InitializeComponent();
}
}
XAML:
<controls:MetroWindow x:Class="XXXX.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:XXXX.ViewModels"
xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
d:DataContext="{d:DesignInstance vm:MainViewModel}"
WindowStartupLocation="Manual"
SaveWindowPosition="True"
Title="{Binding Path=Title, Mode=OneWay}"
Style="{StaticResource MyCleanWindowStyleKey}">
</controls:MetroWindow>
使用以下样式:
<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>