2010-02-01 47 views
5

我需要让我的应用程序如下(C#WPF应用程序):启用最大化,最小化和WPF还原窗口(手动调整大小是禁用)

  1. 拥有1024 * 768
  2. 正常大小用户可以最大限度的应用
  3. 用户可以最大限度地减少应用程序
  4. 用户可以恢复
  5. 用户无法手动draging其边框调整应用程序的应用(1024 * 768)。

没有任何ResizeMode满足所有这些要求。有什么办法可以做吗?

+2

通过添加窗口爆破性质'身高=“1024” WIDTH =“768” ResizeMode =“CanMinimize”'你可以实现除第2点以外的所有内容。 – ChrisF 2010-02-01 12:29:34

+0

您能否告诉我们为什么您要将窗口固定在某个尺寸?它可以帮助我们想出一些解决方案。 – 2010-02-02 11:52:18

+0

我正在研究呈现医学图像的医疗计划。传统程序的固定大小为1024 * 768。因此,对于老客户,我们需要将其作为基本解决方案进行维护。 我们希望能够选择最大化窗口,以便我们可以在某些分辨率下检查程序,无需测试所呈现图像的质量,以防用户将应用程序调整为非标准尺寸 – Nir 2010-02-02 14:22:30

回答

0

您可以侦听Window.SizeChanged事件,并在处理程序内部手动将宽度和高度设置回1027和768.它仍然允许用户拖动窗口的边缘来调整大小,但是随后窗口返回到它的设置尺寸。这样做的缺点是,无论用户何时尝试调整大小,窗口都会“癫痫发作” - 而不是最美丽的事情。正常工作最大限度地减少和最大化工作。

+0

谢谢,我已经试过那个。我遇到的闪烁(“癫痫”)让我在一开始就留下了这个想法。 – Nir 2010-02-02 14:23:57

5

我终于找到了一个相对体面的解决方案。

想法是覆盖窗口的事件,取消最小/最大约束并刷新它。

如果没有最大化的窗口,我们简单地套用背面的最小/最大约束

protected override void OnStateChanged(EventArgs e) 
    { 
     if (WindowState == WindowState.Maximized) 
     { 
      MinWidth = 0; 
      MinHeight = 0; 
      MaxWidth = int.MaxValue; 
      MaxHeight = int.MaxValue; 

      if (!m_isDuringMaximizing) 
      { 
       m_isDuringMaximizing = true; 
       WindowState = WindowState.Normal; 
       WindowState = WindowState.Maximized; 
       m_isDuringMaximizing = false; 
      } 
     } 
     else if (!m_isDuringMaximizing) 
     { 
      MinWidth = 1024; 
      MinHeight = 768; 
      MaxWidth = 1024; 
      MaxHeight = 768; 
     } 

     base.OnStateChanged(e); 
    } 
+0

我知道5年后我问了这个问题,但是这里是什么'm_isDuringMaximizing'? – 2015-06-30 01:03:03

相关问题