在WPF窗口(C#)的标题栏中禁用关闭按钮
发布时间:2020-12-15 03:46:08 所属栏目:百科 来源:网络整理
导读:我想知道如何在 WPF窗口中禁用(不删除/隐藏)关闭按钮.我知道如何隐藏它,这使窗口的标题栏看起来像这样: 但是我想禁用它意味着它应该是这样的: 我在C#中编写脚本并使用WPF(Windows Presentation Foundation). 解决方法 尝试这个: public partial class Mai
我想知道如何在
WPF窗口中禁用(不删除/隐藏)关闭按钮.我知道如何隐藏它,这使窗口的标题栏看起来像这样:
但是我想禁用它意味着它应该是这样的: 我在C#中编写脚本并使用WPF(Windows Presentation Foundation). 解决方法
尝试这个:
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; } } (取自: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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |