如何从WPF中的可resize的窗口中删除最小化和最大化?
WPF没有提供允许resize的窗口,但没有最大化或最小化button。 我想能够做出这样一个窗口,所以我可以resize的对话框。
我知道解决scheme将意味着使用pinvoke,但我不知道该怎么调用以及如何。 pinvoke.net的search没有出现在我身上,因为我需要的东西,主要是我确定,因为Windows窗体确实在其窗口上提供了CanMinimize
和CanMaximize
属性。
有人可以指点我或提供代码(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”