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;
}
}
我有一个 "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;
}
}