C#WPF最大化了Window的位置

时间:2017-12-01 18:50:16

标签: c# wpf window maximize

我在使用WPF和C#创建的应用程序中有一个窗口。我设置MaxHeight = 200,MaxWidth = 500和StartupLocation = CenterScreen.However最大化此窗口使其位于屏幕的左上区域,即:不再在中心!即使在最大化条件下在Window_StateChanged事件中设置Left = 200和Top = 200,最大化窗口始终位于左上部。

  private void Window_StateChanged(object sender, EventArgs e)
   {
       if (this.WindowState == WindowState.Maximized)
       {
       //   Left = System.Windows.SystemParameters.WorkArea.Width - Width;
          Left = 200;
        //  Top = System.Windows.SystemParameters.WorkArea.Height - Height;
         Top = 200;          
       }
   }

我应该怎么做以确保最大化的窗口位于中心? 非常感谢提前。

3 个答案:

答案 0 :(得分:2)

当你在Window_StateChanged中检测到最大化时,将其设置回正常状态。看看这个:disable maximize capacity in a wpf window

答案 1 :(得分:1)

您无法设置最大化窗口的位置。根据定义,它会尝试占据整个屏幕,因此总是将左上角置于0,0。 您可以根据需要执行的操作是拦截State更改事件,将窗口大小设置为最大值,然后将State设置回WindowState.Normal

答案 2 :(得分:0)

您可以通过覆盖WndProc来实现此目的

protected override void WndProc( ref Message m ) 
   { 
       if( m.Msg == 0x0112 ) //WM_SYSCOMMAND
       { // Check your window state here
           if (m.WParam == new IntPtr( 0xF030 ) ) // Maximize event - SC_MAXIMIZE from Winuser.h  
       { // THe window is being maximized }
       }
       base.WndProc(ref m);
    }

有关更多参考,请查看此链接 https://www.google.co.in/url?sa=t&source=web&rct=j&url=https://stackoverflow.com/questions/1295999/event-when-a-window-gets-maximized-un-maximized&ved=0ahUKEwjPk9zUve3XAhVBGpQKHRCsAKEQFggkMAA&usg=AOvVaw1bgX8XejRP3t2tJ4txKQrq