首页 文章

最小化WPF中的窗口位置

提问于
浏览
1

我试图将自定义对话框的位置保存到用户注册表,以便当他们重新加载相同的对话框时,它会显示在他们移动的相同位置或将其重新调整为以前 . 我正在保存窗口X位置Y位置宽度和高度 . 除了对话框最小化时,一切正常 . 如果对话框最小化并且用户右键单击任务栏上的对话框表示(Windows 7),则可以单击“关闭此窗口” . 奇怪的是,数字-32030作为X和Y位置保存在注册表中,但宽度和高度得到正确保存 . 知道这个号码来自何处以及在这种情况下该怎么办thx

2 回答

  • 3

    保存窗口位置时,您需要这样的东西:

    if (this.WindowState == WindowState.Normal)
    {
        Properties.Settings.Default.Top = Top;
        Properties.Settings.Default.Left = Left;
        Properties.Settings.Default.Height = Height;
        Properties.Settings.Default.Width = Width;
    }
    else
    {
        Properties.Settings.Default.Top = RestoreBounds.Top;
        Properties.Settings.Default.Left = RestoreBounds.Left;
        Properties.Settings.Default.Height = RestoreBounds.Height;
        Properties.Settings.Default.Width = RestoreBounds.Width;
        // Check for WindowState.Maximized or WindowState.Minimized if you
        // need to do something different for each case (e.g. store if application
        // was Maximized
    }
    

    重要的是 RestoreBounds ,当窗口最大化或最小化时,您需要它 . 代码可能会被重构,以使其更有效,但你明白了 .

  • 6

    我猜你在窗户关闭时更新窗口位置?如果是这种情况,有几种解决方案 .

    1)将窗口位置保存在不同的事件上,例如调整窗口大小或移动窗口时 . 2)在保存X和Y位置之前检查窗口是否最小化 .

    例:

    switch (this.WindowState)
    {
        case WindowState.Maximized:
            // don't update the X,Y
            break;
        case WindowState.Minimized:
            // don't update the X,Y
            break;
        case WindowState.Normal:
            // DO update the X,Y
            break;
    }
    

相关问题