Window "session" 位置动态

Window location dynamic on "session"

我有一个 "popup" 带有 ShowDialog 的 window 应用程序。 ShowDialog在应用生命周期中可以多次调用

所以,我想知道是否可以(简单地)将 Window 位置默认设置为 "CenterOwner"(就像现在一样)。但是如果用户改变window的位置,在主应用程序的生命周期中,下一次它会在以前的位置弹出。 但是下次他将 运行 该应用程序时,window 将在 CenterOwner 中弹出。

后面没有很多代码可以吗?

谢谢。希望我已经清楚了。

不需要太多代码隐藏。首先,在您的对话框 XAML 中,您应该将启动位置设置为 CenterOwner:

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

接下来,在您后面的代码中,您应该记住原始开始位置并保存 window 的位置(如果它在 window 关闭时已被移动):

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