Comment puis-je supprimer minimiser et agrandir à partir d’une fenêtre redimensionnable dans WPF?

WPF ne permet pas d’avoir une fenêtre qui permet de redimensionner mais n’a pas de boutons maximaux ou minimaux. Je voudrais pouvoir créer une telle fenêtre pour avoir des boîtes de dialog redimensionnables.

Je sais que la solution signifie utiliser Pinvoke mais je ne sais pas quoi appeler et comment. Une recherche sur pinvoke.net n’a pas révélé quelque chose qui me sautait aux yeux comme ce dont j’avais besoin, principalement parce que Windows Forms fournit les propriétés CanMinimize et CanMaximize sur ses fenêtres.

Quelqu’un pourrait-il m’indiquer ou fournir un code (C # préféré) sur la façon de procéder?

J’ai volé du code trouvé sur les forums MSDN et créé une méthode d’extension sur la classe Window, comme ceci:

 internal static class WindowExtensions { // from winuser.h private const int GWL_STYLE = -16, WS_MAXIMIZEBOX = 0x10000, WS_MINIMIZEBOX = 0x20000; [DllImport("user32.dll")] extern private static int GetWindowLong(IntPtr hwnd, int index); [DllImport("user32.dll")] extern private static int SetWindowLong(IntPtr hwnd, int index, int value); internal static void HideMinimizeAndMaximizeButtons(this Window window) { IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(window).Handle; var currentStyle = GetWindowLong(hwnd, GWL_STYLE); SetWindowLong(hwnd, GWL_STYLE, (currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX)); } } 

La seule autre chose à retenir est que pour une raison quelconque, cela ne fonctionne pas avec le constructeur d’une fenêtre. J’ai contourné cela en introduisant ceci dans le constructeur:

 this.SourceInitialized += (x, y) => { this.HideMinimizeAndMaximizeButtons(); }; 

J’espère que cela t’aides!

Une manière consiste à définir votre ResizeMode="NoResize" . Il se comportera comme ça. entrer la description de l'image ici

J’espère que ça aide!

Je ne sais pas si cela fonctionne pour votre demande. visuellement .. Ceci est

  

Si quelqu’un utilise la fenêtre Devexpress (DXWindow), la réponse acceptée ne fonctionne pas. Une approche laide est

 public partial class MyAwesomeWindow : DXWindow { public MyAwesomeWIndow() { Loaded += OnLoaded; } private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) { // hides maximize button Button button = (Button)DevExpress.Xpf.Core.Native.LayoutHelper.FindElementByName(this, DXWindow.ButtonParts.PART_Maximize.ToSsortingng()); button.IsHitTestVisible = false; button.Opacity = 0; // hides minimize button button = (Button)DevExpress.Xpf.Core.Native.LayoutHelper.FindElementByName(this, DXWindow.ButtonParts.PART_Minimize.ToSsortingng()); button.IsHitTestVisible = false; button.Opacity = 0; // hides close button button = (Button)DevExpress.Xpf.Core.Native.LayoutHelper.FindElementByName(this, DXWindow.ButtonParts.PART_CloseButton.ToSsortingng()); button.IsHitTestVisible = false; button.Opacity = 0; } } 

Voici une solution que j’utilise. Notez que le bouton Agrandir est toujours affiché.

Balisage:

  

Code derrière:

 // Disable maximizing this window private void Window_StateChanged(object sender, EventArgs e) { if (this.WindowState == WindowState.Maximized) this.WindowState = WindowState.Normal; } 

Vous pouvez définir le ResizeMode = “NoResize” de la fenêtre si vous souhaitez supprimer le bouton Réduire et Agrandir