2015-02-09 66 views
0

我有一個應用程序,用ShowDialog「彈出」窗口。 ShowDialog可以在應用程序生命週期中多次調用。因此,我想知道是否有可能(簡單地)將窗口位置默認設置爲「CenterOwner」(就像現在一樣)。但是,如果用戶在主應用程序的生命週期中更改了窗口的位置,那麼下次它將在之前的位置彈出。 但是,下次他將運行該應用程序時,該窗口將在CenterOwner中彈出。「會話」上的窗口位置動態

是否有可能沒有很多代碼?

謝謝。希望我已經清楚。

回答

1

它不需要太多代碼隱藏。首先,在你的對話框的XAML你應該啓動位置設置爲CenterOwner:

<Window WindowStartupLocation="CenterOwner" 
     Loaded="Window_Loaded" 
     > 

接下來,在後面的代碼,你應該還記得原來的開始位置和保存窗口的位置,如果它已被移動窗口關閉時:

private double _startLeft; 
private double _startTop; 
static double? _forceLeft = null; 
static double? _forceTop = null; 

void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    // Remember startup location 
    _startLeft = this.Left; 
    _startTop = this.Top; 
} 

// Window is closing. Save location if window has moved. 
protected override void OnClosing(System.ComponentModel.CancelEventArgs e) 
{ 
    if (this.Left != _startLeft || 
     this.Top != _startTop) 
    { 
     _forceLeft = this.Left; 
     _forceTop = this.Top; 
    } 
} 

// Restore saved location if it exists 
protected override void OnSourceInitialized(EventArgs e) 
{ 
    base.OnSourceInitialized(e); 
    if (_forceLeft.HasValue) 
    { 
     this.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual; 
     this.Left = _forceLeft.Value; 
     this.Top = _forceTop.Value; 
    } 
}