WPF не предоставляет возможности иметь окно, которое позволяет изменять размер, но не имеет кнопок развертывания или минимизации. Я хотел бы создать такое окно, чтобы иметь диалоговые окна с изменяемым размером.
Я знаю, что решение будет означать использование pinvoke, но я не уверен, что и как звонить. Поиск на сайте pinvoke.net не обнаружил ничего, что бы показалось мне нужным, в основном я уверен, потому что Windows Forms предоставляет CanMinimize
иCanMaximize
свойства на своих окнах.
Может ли кто-нибудь указать мне или предоставить код (предпочтительно C #) о том, как это сделать?
источник
Один из способов - установить ваш
ResizeMode="NoResize"
. Он будет вести себя так.Надеюсь, это поможет!
источник
resizable window
в WPF?» когда он снимает с «изменяемым» аспектом из готового продукта. Это все равно, что помочь кому-то, кто хочет покрасить свою машину в красный цвет, и при этом вы снимаете двигатель.Не знаю, работает ли это для вашего запроса. визуально .. Это
<Window x:Class="DataBinding.MyWindow" ...Title="MyWindow" Height="300" Width="300" WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip">
источник
MaxWidth
и / илиMaxHeight
окно.Если кто-то использует окно 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; } }
источник
Вот решение, которое я использую. Обратите внимание, что кнопка развертывания все еще отображается.
Разметка:
<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; }
источник
Вы можете установить ResizeMode = "NoResize" окна, если хотите удалить кнопки "Свернуть" и "Развернуть".
источник
Этот вариант решения, предложенный @MattHamilton, может (и должен) вызываться в конструкторе Window. Хитрость заключается в том, чтобы подписать делегата на
SourceInitialized
событие в методе расширения.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); }; }
источник