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 SC_CLOSE = 0xF060;
public MainWindow()
{
InitializeComponent();
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
// Disable close button
IntPtr hwnd = new WindowInteropHelper(this).Handle;
IntPtr hMenu = GetSystemMenu(hwnd, false);
if (hMenu != IntPtr.Zero)
{
EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
}
}
}
hereから取得しました(編集:リンクが壊れています)。
を に設定しResizeMode
てくださいNoResize
。
オーバーライドし、OnCLosingイベントで e.cancel=true を設定する必要があります
public MyWindow()
{
InitializeComponent();
this.Closing += new System.ComponentModel.CancelEventHandler(MyWindow_Closing);
}
void MyWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
}
おそらくwin32ハッカーでそれを行うことができます。
私はこのようにしました:CustomChromeWindow(最終的には写真のようになります)を取得し、Command()プロパティをviewmodelにバインドしてから、ボタンを無効にするCanExecuteCommand = falseを設定します(どのように " MVVMパターンを使用してWPFのボタンを無効にしますか? )。
私にもこの方法があるかもしれません: C++ を使用して別のプロセスでウィンドウの閉じるボタンを無効にする方法は?
基本的に、そのコードを pInvoke で呼び出します。WPF ウィンドウ ハンドルを簡単に取得できます。