我正在尝试在辅助显示器的右上角放置一个窗口。在 Window_Loaded 事件处理程序中,我有以下代码:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.Left = Screen.AllScreens[1].WorkingArea.Left;
this.Top = Screen.AllScreens[1].WorkingArea.Top;
}
Run Code Online (Sandbox Code Playgroud)
当我的两个显示器的比例因子均为 100% 时,这非常有效,但是一旦我更改主显示器的比例,窗口就会完全加载到屏幕外。
有谁知道在 WPF 中绝对定位窗口的方法?我找到的大多数答案都是 Win8.1 之前的,不必担心缩放。我似乎无法弄清楚Top和Left属性背后的模式。感谢您的帮助。
小智 6
我在 CodeProject 上找到了解决这个问题的方法
解决方案是计算真实分辨率和 的分辨率之间的比率WorkingArea。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var scaleRatio = Math.Max(Screen.PrimaryScreen.WorkingArea.Width / SystemParameters.PrimaryScreenWidth,
Screen.PrimaryScreen.WorkingArea.Height / SystemParameters.PrimaryScreenHeight);
this.Left = Screen.AllScreens[1].WorkingArea.Left / scaleRatio ;
this.Top = Screen.AllScreens[1].WorkingArea.Top / scaleRatio ;
}
Run Code Online (Sandbox Code Playgroud)
您可以执行以下操作
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var p = this.PointFromScreen(new Point(Screen.AllScreens[1].WorkingArea.X, Screen.AllScreens[1].WorkingArea.Y));
this.Left += p.X;
this.Top += p.Y;
}
Run Code Online (Sandbox Code Playgroud)
我发现 PointFromScreen 函数告诉您绝对坐标相对于窗口的偏移量。选择显示屏左上角的位置,您就知道需要移动多少 - 但重要的是它的单位与窗口的Top和相同Bottom。这是一个相当狭窄的案例,但可以推断出一般的定位。希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
3464 次 |
| 最近记录: |