当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何从WPF中可调整大小的窗口中删除最小化和最大化?》经验,为你挑选了4个好方法。

WPF不提供允许调整大小但没有最大化或最小化按钮的窗口的功能.我想能够制作这样一个窗口,以便我可以使用可调整大小的对话框.

我知道解决方案意味着使用pinvoke,但我不知道该怎么称呼以及怎么做.一个搜索pinvoke.net的不转了,在我跳了出来,因为我需要什么什么东西,主要是我敢肯定,因为Windows窗体并提供CanMinimizeCanMaximize性能上它的窗口.

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



1> Matt Hamilto..:

我偷了一些我在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();
};

希望这可以帮助!


Window中的一些更漂亮的代码:protected override void OnSourceInitialized(EventArgs e){base.OnSourceInitialized(e); this.HideMinimizeAndMaximizeButtons(); }
在所有这些时间都知道Windows窗体中存在此功能之后,我只是不了解microsoft从一开始就没有在WPF中放置这种功能。坦率地说,带有最小化框和最大化书的对话框看起来并不专业,并且标题栏的双击也是同样的问题。抱歉让我对WPF感到沮丧,它非常好,并且具有字符串资产,但是偶尔您偶然发现一些本来应该简单但最终不是的简单东西。

2> Musikero31..:

一种方法是设置你的ResizeMode="NoResize".它会表现得像这样. 在此输入图像描述

我希望这有帮助!


这会使窗口无法调整大小,这与问题直接相反.
一般来说,寻找禁用最小化和最大化按钮的方法的googlers没有特定的要求让窗口可以调整大小.目前这是"wpf window disable minimize"查询的最佳结果,这个答案正确回答了这个问题.无论如何,MS没有将标题栏或整个窗口镀铬作为"只是另一个控制或财产"的耻辱.来自'90的太多遗产......
不回答问题,但对我有帮助.谢谢.
在这种情况下,具有动态宽度的元素(例如DockPanel)仍然能够改变窗口大小.但不再是用户了.所以,这个选项实际上符合我的要求.

3> Gishu..:

不知道这是否适用于您的需求.视觉上..这是




4> Eldar..:

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

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有