如何从WPF中的可resize的窗口中删除最小化和最大化?

WPF没有提供允许resize的窗口,但没有最大化或最小化button。 我想能够做出这样一个窗口,所以我可以resize的对话框。

我知道解决scheme将意味着使用pinvoke,但我不知道该怎么调用以及如何。 pinvoke.net的search没有出现在我身上,因为我需要的东西,主要是我确定,因为Windows窗体确实在其窗口上提供了CanMinimizeCanMaximize属性。

有人可以指点我或提供代码(C#首选)如何做到这一点?

我偷了一些我在MSDN论坛上find的代码,并在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)); } } 

唯一需要记住的是,由于某种原因,这不适用于窗口的构造函数。 我通过将它embedded构造函数来解决这个问题:

 this.SourceInitialized += (x, y) => { this.HideMinimizeAndMaximizeButtons(); }; 

希望这可以帮助!

一种方法是设置ResizeMode="NoResize" 。 它会performance得如此。 在这里输入图像说明

我希望这有帮助!

不知道这是否适合你的要求。 视觉..这是

 <Window x:Class="DataBinding.MyWindow" ...Title="MyWindow" Height="300" Width="300" WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip"> 

这是我正在使用的解决scheme。 请注意,最大化button仍然显示。

标记:

 <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; } 

如果有人使用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; } } 

如果要删除最小化和最大化button,可以设置窗口的ResizeMode =“NoResize”