最小化WPF中的窗口位置

时间:2010-05-04 15:34:57

标签: c# wpf

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

2 个答案:

答案 0 :(得分:6)

保存窗口位置时,您需要这样的内容:

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。代码可能会被重构以使其更有效,但你明白了。

答案 1 :(得分:3)

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

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;
}