Как удалить минимизацию и максимизировать из изменяемого размера окна в WPF?
WPF не предоставляет возможность иметь окно, которое позволяет изменять размер, но не имеет кнопки увеличения или уменьшения. Я хотел бы сделать такое окно, чтобы у меня были изменения размеров диалоговых окон.
Я знаю, что решение будет означать использование pinvoke, но я не уверен, что звонить и как. Поиск pinvoke.net не вызвал у меня ничего, что мне нужно, в основном, я уверен, потому что Windows Forms предоставляет свойства CanMinimize
и CanMaximize
в своих окнах.
Может ли кто-нибудь указать мне или предоставить код (предпочтительный вариант С#) о том, как это сделать?
Ответы
Ответ 1
Я украл код, который я нашел на форумах 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();
};
Надеюсь, это поможет!
Ответ 2
Один из способов - установить ResizeMode="NoResize"
. Он будет вести себя так.
![enter image description here]()
Надеюсь, это поможет!
Ответ 3
![ResizableToolWindow.jpg]()
Не знаю, работает ли это для вашего req. визуально.. Это
<Window x:Class="DataBinding.MyWindow" ...Title="MyWindow" Height="300" Width="300"
WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip">
Ответ 4
Вот решение, которое я использую. Обратите внимание, что кнопка максимизации все еще отображается.
Разметка:
<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;
}
Ответ 5
Если кто-либо использует окно 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;
}
}
Ответ 6
Вы можете установить ResizeMode = "NoResize" окна, если вы хотите удалить кнопку "Свернуть и увеличить"