【问题标题】:Restored WPF Window恢复的 WPF 窗口
【发布时间】:2018-09-29 06:31:55
【问题描述】:

我可以选择最小化启动我的主窗口。窗口设置为 SizeToContent="WidthAndHeight"。当我单击恢复窗口时,它打开的窗口大于初始宽度和高度。我在 MainWindow.xaml.cs 中使用以下内容

   private void WindowStart()
    {
        if (LocalSystem.StartMinimized)
        {
            WindowState = WindowState.Minimized;
            ShowInTaskbar = true;
        }
        if (LocalSystem.StartOnTop)
        {
            Topmost = true;
        }
        Activate();
    }

【问题讨论】:

  • 有什么问题?这段代码不起作用吗?你的 WindowStart 方法是从哪里调用的?你在使用 MVVM 吗? LocalSystem 是什么?
  • 当我将窗口最小化时,它比它应该的大。正常启动它是查找并执行 WidthAndHeight。它确实开始最小化。 WindowStart 是 MainWindow() 中调用的最后一个方法。

标签: c# wpf


【解决方案1】:

考虑跟踪 WPF 窗口的状态变化。添加窗口的 StateChanged 事件的事件处理程序并跟踪窗口的宽度和高度。

您可以像这样跟踪窗口的大小:

public MainWindow() {

 InitializeComponent();
  _lastState = this.WindowState;
  _initialWidth = this.ActualWidth;
  _initialHeight = this.ActualHeight;
   this.StateChanged += Window_StateChanged;
}


    WindowState _lastState;
    double _initialwidth, _initialHeight;

    private void Window_StateChanged(object sender, EventArgs e)
    {
        if (this.WindowState != _lastState)
        {
          if (_lastState == WindowState.Minimized && this.WindowState == WindowState.Maximized){
            this.Width = _initialWidth;
            this.Height = _initialHeight;

           }
           _lastState = this.WindowState;

        }
    }

注意 ActualHeight 和 ActualWidth 的使用。在 InitializeComponent 在其构造函数中运行后,将知道 Window 的实际尺寸。一个恢复的或未最小化的,正如你所说的那样,窗口是状态从 WindowState.Minimized 到 WindowState.Maximized 的窗口。

请注意,我们会尽量减少 WPF 应用程序中的代码量,最佳做法是使用 MVVM。您可以考虑创建一个 WPF 行为类来恢复 Window 的初始大小,毕竟它是一种通用行为。

【讨论】:

  • 我无法在初始化后加载要加载的尺寸,但通过将它们放入我的 Loaded += Window_Load 中,我能够让您的代码和我的 WindowStart 正常工作。我不知道为什么它会这样工作。您的活动中还有两个 _initialWidth。
  • 那么,Window 布局的计算是在 Loaded 事件中完成的。抱歉,我没有在电脑附近输入我的示例代码来验证,但如果它可以帮助您解决问题,那就太好了。快乐的 WPF。我现在修复了代码中的双宽度错字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多