我想知道如何禁用(不删除/隐藏)WPF窗口中的关闭按钮.我知道如何隐藏它使窗口的标题栏看起来像这样:
但我想禁用它意味着它应该是这样的:
我在C#中编写脚本并使用WPF(Windows Presentation Foundation).
Yoa*_*oav 22
试试这个:
public partial class MainWindow : Window
{
[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")]
static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);
const uint MF_BYCOMMAND = 0x00000000;
const uint MF_GRAYED = 0x00000001;
const uint MF_ENABLED = 0x00000000;
const uint SC_CLOSE = 0xF060;
const int WM_SHOWWINDOW = 0x00000018;
const int WM_CLOSE = 0x10;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
if (hwndSource != null)
{
hwndSource.AddHook(new HwndSourceHook(this.hwndSourceHook));
}
}
IntPtr hwndSourceHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_SHOWWINDOW)
{
IntPtr hMenu = GetSystemMenu(hwnd, false);
if (hMenu != IntPtr.Zero)
{
EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
}
}
else if (msg == WM_CLOSE)
{
handled = true;
}
return IntPtr.Zero;
}
}
Run Code Online (Sandbox Code Playgroud)
(摘自:http://blogs.microsoft.co.il/blogs/tamir/archive/2007/09/26/never-ever-close-me-how-to-disable-close-button-in-wpf .aspx)
确保你设置ResizeMode
为NoResize
.