none
wpf禁止拖动窗口边缘调整大小,但可以点击最大化按钮来最大化 RRS feed

  • 问题

  • 有个需要,wpf程序能够点击最大最小化按钮,但不能通过鼠标来拖动窗口边框来改变窗口大小。

    而ResizeMode = { NoResize,CanMinimize,CanResize,CanResizeWithGrip}

    WindowStyle属性不具备这个功能。

    MFC单文档程序可以使用

    cs.dwExStyle=cs.dwExStyle;
    cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX;来实现。

    问下wpf下怎么实现这个功能,只能自定义最大最小化按钮了吗?如果是这样的话就需要实现不少系统功能了。有什么简单的办法?

    • 已编辑 skczjun 2013年10月12日 3:05 增加描述
    2013年10月12日 0:47

答案

  • 您好,

    根据您的需求,我尝试使用重写OnStateChanged方法和利用WPF的MinHeight, MaxHeight, MinWidth,

    MaxWidth属性:

    protected override void OnStateChanged(EventArgs e)
    {
                if (this.WindowState == System.Windows.WindowState.Maximized /* && some 
    
    conditions*/)
                {
                    this.MinHeight = 0;
                    this.MaxHeight = 99999;
                    this.MaxWidth = 99999;
                    this.MinWidth = 0;
                    this.SizeChanged -= new SizeChangedEventHandler(Window_SizeChanged);
                    base.OnStateChanged(e);
                    
                }
                else if (this.WindowState == System.Windows.WindowState.Normal)
                {
                    this.SizeChanged += new SizeChangedEventHandler(Window_SizeChanged);
                }
    }
    
    private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
    {
                this.MinHeight = 350;
                this.MaxHeight = 350;
                this.MaxWidth = 525;
                this.MinWidth = 525;
    }

    XAML:

    <Window x:Class="WpfApplication2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525" SizeChanged="Window_SizeChanged" >

    唯一的问题是,在每次最大化时,第一次总是不能正常最大化,窗体只会移至最上角,再点击最大化按

    钮两次才可以正常最大化。

    要想完美实现您的需求,自定义最大化和最小化按钮可能是唯一的方案。

    参考资料:

    #FrameworkElement.MaxHeight Property
    http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.maxheight.aspx

    #FrameworkElement.MaxWidth Property
    http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.maxwidth.aspx


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月14日 5:58
    版主