WPF bietet keine Möglichkeit, ein Fenster zu erstellen, in dem die Größe geändert werden kann, jedoch keine Schaltflächen zum Maximieren oder Minimieren. Ich möchte ein solches Fenster erstellen können, damit ich die Größe der Dialogfelder ändern kann.
Ich bin mir bewusst, dass die Lösung die Verwendung von Pinvoke bedeuten wird, bin mir aber nicht sicher, wie und wie ich anrufen soll. Eine Suche in pinvoke.net ergab nichts, was mir als das heraussprang, was ich brauchte. Ich bin mir hauptsächlich sicher, dass Windows Forms die Eigenschaften CanMinimize
und CanMaximize
in seinen Fenstern bereitstellt .
Könnte mich jemand darauf hinweisen oder Code (C # bevorzugt) angeben, wie das geht?
quelle
Eine Möglichkeit besteht darin, Ihre Einstellungen vorzunehmen
ResizeMode="NoResize"
. Es wird sich so verhalten.Ich hoffe das hilft!
quelle
Ich weiß nicht, ob dies für Ihre Anforderung funktioniert. visuell .. Dies ist
<Window x:Class="DataBinding.MyWindow" ...Title="MyWindow" Height="300" Width="300" WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip">
quelle
MaxWidth
und / oderMaxHeight
das Fenster eingestellt wurde.Wenn jemand das Devexpress-Fenster (DXWindow) verwendet, funktioniert die akzeptierte Antwort nicht. Ein hässlicher Ansatz ist
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; } }
quelle
Hier ist eine Lösung, die ich verwende. Beachten Sie, dass die Schaltfläche zum Maximieren weiterhin angezeigt wird.
Markup:
<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">
Code dahinter:
// Disable maximizing this window private void Window_StateChanged(object sender, EventArgs e) { if (this.WindowState == WindowState.Maximized) this.WindowState = WindowState.Normal; }
quelle
Sie können den ResizeMode = "NoResize" des Fensters festlegen, wenn Sie die Schaltfläche "Minimieren" und "Maximieren" entfernen möchten
quelle
Diese von @MattHamilton vorgeschlagene Variante der Lösung kann (und muss) im Konstruktor des Fensters aufgerufen werden. Der Trick besteht darin, einen Delegaten für das
SourceInitialized
Ereignis innerhalb der Erweiterungsmethode zu abonnieren .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); }; }
quelle