18

WPF ウィンドウの [閉じる] ボタンを無効にする (削除/非表示にするのではなく) 方法を知りたいです。ウィンドウのタイトルバーを次のように非表示にする方法を知っています。

ここに画像の説明を入力

しかし、無効にしたいのは、次のようになることを意味します。

ここに画像の説明を入力

私は C# でスクリプトを作成し、WPF (Windows Presentation Foundation) を使用しています。

4

4 に答える 4

24

これを試して:

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

于 2013-07-31T05:57:58.743 に答える
3

オーバーライドし、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;
}
于 2013-07-31T05:46:07.790 に答える
0

おそらくwin32ハッカーでそれを行うことができます。

私はこのようにしました:CustomChromeWindow(最終的には写真のようになります)を取得し、Command()プロパティをviewmodelにバインドしてから、ボタンを無効にするCanExecuteCommand = falseを設定します(どのように " MVVMパターンを使用してWPFのボタンを無効にしますか? )。

私にもこの方法があるかもしれません: C++ を使用して別のプロセスでウィンドウの閉じるボタンを無効にする方法は?

基本的に、そのコードを pInvoke で呼び出します。WPF ウィンドウ ハンドルを簡単に取得できます。

于 2013-07-31T05:47:28.077 に答える