WPF no proporciona la capacidad de tener una ventana que permita cambiar el tamaño, pero no tiene botones para maximizar o minimizar. Me gustaría poder hacer una ventana así para poder tener cuadros de diálogo de tamaño variable.
Soy consciente de que la solución significará usar pinvoke, pero no estoy seguro de qué llamar y cómo. Una búsqueda en pinvoke.net no mostró nada que me llamara la atención como lo que necesitaba, principalmente estoy seguro porque Windows Forms proporciona las propiedades CanMinimize
y CanMaximize
en sus ventanas.
¿Alguien podría indicarme o proporcionarme un código (se prefiere C #) sobre cómo hacer esto?
fuente
Una forma es configurar su
ResizeMode="NoResize"
. Se comportará así.¡Espero que esto ayude!
fuente
resizable window
en WPF?" cuando elimina el aspecto "redimensionable" del producto terminado. Eso es como ayudar a alguien que quiere pintar su auto de rojo y en el proceso le quitas el motor.No sé si esto funciona para su req. visualmente ... Esto es
<Window x:Class="DataBinding.MyWindow" ...Title="MyWindow" Height="300" Width="300" WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip">
fuente
MaxWidth
y / oMaxHeight
la ventana.Si alguien usa la ventana Devexpress (DXWindow), la respuesta aceptada no funciona. Un enfoque desagradable es
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.ToString()); button.IsHitTestVisible = false; button.Opacity = 0; // hides minimize button button = (Button)DevExpress.Xpf.Core.Native.LayoutHelper.FindElementByName(this, DXWindow.ButtonParts.PART_Minimize.ToString()); button.IsHitTestVisible = false; button.Opacity = 0; // hides close button button = (Button)DevExpress.Xpf.Core.Native.LayoutHelper.FindElementByName(this, DXWindow.ButtonParts.PART_CloseButton.ToString()); button.IsHitTestVisible = false; button.Opacity = 0; } }
fuente
Aquí hay una solución que estoy usando. Tenga en cuenta que el botón de maximizar todavía se muestra.
Margen:
<Window x:Class="Example" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Example" StateChanged="Window_StateChanged">
Código detrás:
// Disable maximizing this window private void Window_StateChanged(object sender, EventArgs e) { if (this.WindowState == WindowState.Maximized) this.WindowState = WindowState.Normal; }
fuente
Puede configurar ResizeMode = "NoResize" de la ventana si desea eliminar el botón Minimizar y Maximizar
fuente
Esta variante de la solución propuesta por @MattHamilton puede (y debe) ser llamada en el constructor de la Ventana. El truco consiste en suscribir a un delegado al
SourceInitialized
evento dentro del método de extensión.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); /// <summary> /// Hides the Minimize and Maximize buttons in a Window. Must be called in the constructor. /// </summary> /// <param name="window">The Window whose Minimize/Maximize buttons will be hidden.</param> public static void HideMinimizeAndMaximizeButtons(this Window window) { window.SourceInitialized += (s, e) => { IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(window).Handle; int currentStyle = GetWindowLong(hwnd, GWL_STYLE); SetWindowLong(hwnd, GWL_STYLE, currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX); }; }
fuente