2010-05-04 114 views
1

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

回答

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

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