Как удалить свернуть и развернуть из изменяемого размера окна в WPF?
WPF не предоставляет возможность иметь окно, которое позволяет изменять размер, но не имеет кнопок максимизации или минимизации. Я хотел бы сделать такое окно, чтобы у меня были диалоговые окна с возможностью изменения размера.
Я знаю, что решение будет означать использование pinvoke, но я не уверен, что называть и как. Обыск pinvoke.net не оказалось ничего, что выскочило на меня, как то, что мне нужно, в основном я уверен, потому что Windows Forms предоставляет CanMinimize и CanMaximize свойства окна.
может ли кто-нибудь указать мне или предоставить код (предпочтительный C#) о том, как это сделать?
6 ответов:
Я украл некоторый код, который я нашел на форумах MSDN и сделал метод расширения в классе Window, например:
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)); } }единственное, что нужно помнить, это то, что по какой-то причине это не работает из конструктора окна. Я обошел это, бросив это в конструктор:
this.SourceInitialized += (x, y) => { this.HideMinimizeAndMaximizeButtons(); };надеюсь, что это помогает!
если кто-то использует окно Devexpress (DXWindow) принятый ответ не работает. Один уродливый подход
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; } }
вы можете установить ResizeMode= "NoResize" окна, если вы хотите удалить кнопку Свернуть и развернуть
вот решение, которое я использую. Обратите внимание, что кнопка "развернуть" по-прежнему отображается.
разметка:
<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">код:
// Disable maximizing this window private void Window_StateChanged(object sender, EventArgs e) { if (this.WindowState == WindowState.Maximized) this.WindowState = WindowState.Normal; }


Comments