如何将启动时窗口的位置定位到用户屏幕的右侧?

Posted

技术标签:

【中文标题】如何将启动时窗口的位置定位到用户屏幕的右侧?【英文标题】:How can I position the window's position on startup to the right side of the user's screen? 【发布时间】:2012-02-25 14:47:33 【问题描述】:

我目前正在用 C# 创建一个类似侧边栏的 WPF 应用程序。当用户启动应用程序时,我希望窗口自动将其自身定位到用户屏幕的一侧。我尝试了一些方法和谷歌搜索,但没有找到任何帮助。

这是我正在尝试做的一个示例:

http://prntscr.com/5tfkz

我怎样才能有效地实现这样的目标?


@dknaack

我试过这段代码:

private void Window_Loaded(object sender, RoutedEventArgs e)
        

            this.Left = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right - this.Width;
            this.Top = 0;
            this.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;

        

并得到以下错误:

错误 1 ​​类型“System.Drawing.Size”在未引用的程序集中定义。您必须添加对程序集“System.Drawing,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”的引用。 C:\Users\Test\Documents\Expression\Blend 4\Projects\WindBar_Prototype_1\WindBar_Prototype_1\MainWindow.xaml.cs 32 13 WindBar_Prototype_1

错误 2“System.Drawing.Size”不包含“Width”的定义,并且找不到接受“System.Drawing.Size”类型的第一个参数的扩展方法“Width”(您是否缺少使用指令还是程序集参考?)C:\Users\Test\Documents\Expression\Blend 4\Projects\WindBar_Prototype_1\WindBar_Prototype_1\MainWindow.xaml.cs 32 78 WindBar_Prototype_1

有什么帮助吗?

【问题讨论】:

【参考方案1】:

说明

您可以从System.Windows.Forms 使用Screen

所以添加对System.Windows.Forms.dllSystem.Drawing.dll 的引用。然后更改MainWindow_Loaded方法中的LeftHeight属性。

样本

public MainWindow()

    InitializeComponent();
    this.Loaded += new RoutedEventHandler(MainWindow_Loaded);


void MainWindow_Loaded(object sender, RoutedEventArgs e)

    this.Left = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right - this.Width;
    this.Top = 0;
    this.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;

更多信息

MSDN - Screen Class

【讨论】:

@JamesDidzun 你也引用了System.Drawing.dll 吗? 好的,我刚刚尝试过,构建它不再有任何问题。唯一的问题是,它不在屏幕的一侧!看:prntscr.com/5th4q - 再次感谢 看起来事件没有被触发。您可以设置断点以查看该方法是否被调用。查看我的更新答案this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 其实我发现了问题所在。我在窗户上有一些空位......哈哈。谢谢你的帮助! -最佳答案- 很高兴为您提供帮助!祝你有美好的一天!【参考方案2】:

您可以使用SystemParameters 在不引用win 表单程序集的情况下执行此操作。在您的窗口 XAML 背后的代码中:

MainWindow() 
    InitializeComponents();

    this.Loaded += new RoutedEventHandler(
      delegate(object sender, RoutedEventArgs args) 
        Width = 300;
        Left = SystemParameters.VirtualScreenLeft;
        Height = SystemParameters.VirtualScreenHeight;
    

SystemParameters documentation

【讨论】:

System.Windows.Forms.Screen.PrimaryScreen 更适合您拥有超过 1 个屏幕的情况 MikroDel 怎么样?我正在使用三重显示器设置,两个并排,第三个在中间的两个上方。使用 SystemParameters,我实际上得到了我需要的一切。【参考方案3】:

在您的 xaml 中:

WindowStartupLocation="Manual" 

在构造函数中:

 Left = System.Windows.SystemParameters.PrimaryScreenWidth - Width
 Top=0

【讨论】:

【参考方案4】:
public MainWindow()

    InitializeComponent();
    WindowStartupLocation = WindowStartupLocation.Manual;
    Left =  System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width - Width;

【讨论】:

WindowStartupLocation = WindowStartupLocation.Manual; 是个好提示【参考方案5】:

使用 startPosition 属性或 location 属性

【讨论】:

startPosition 属性没有屏幕侧位置 我现在无法尝试代码,但是表单的类中没有 this.position 属性,您可以在其中设置自定义点吗?比如:this.position =new Point(x,y) ? @yoz cia 问题是关于 WPF 窗口的。 private void SetWindowPosition() Left = SystemParameters.PrimaryScreenWidth - (double)GetValue(WidthProperty);顶部 = 0; 【参考方案6】:
<body>
<script>
function myfunc()

    w1=window.open('http://www.google.com','Google','left=0,top=0,width=250px,height=250px');
    w2=window.open('http://www.yahoomail.com','Yahoo Mail','left=1166,top=0,width=250px,height=250px');
    w3=window.open('http://www.people.com','People Magazine','left=1166,top=500,width=250px,height=250px');
    w4=window.open('http://www.time.com','Time Magazines','left=0,top=500,width=250px,height=250px');
    w5=window.open('http://www.ew.com','Entertainment Weekly','left=550,top=250,width=250px,height=250px');



function myclose()

 w1.close(); w2.close(); w3.close(); w4.close(); w5.close();
 w6=window.open('smartwindow.html',' mywindow',',');

</script>
    <div id="cover">
    <img src="images/abstract.jpeg" id="1"   onClick="myfunc()"/>
     <input type="button" value="click to close all windows" onClick="myclose()"/>
     </div>
</body>

【讨论】:

嗯?这是 HTML,而不是 XAML/WPF/C#。您需要阅读问题,而不仅仅是标题。

以上是关于如何将启动时窗口的位置定位到用户屏幕的右侧?的主要内容,如果未能解决你的问题,请参考以下文章

怎样将bat显示窗口全屏化

如何将大屏幕图像下的 figcaption 位置更改为移动图像右侧?

如何获取 XNA 游戏屏幕上的窗口位置?

如何将 div 弹出对话框定位到浏览器屏幕的中心?

CSS基础知识五定位

windows 中如何定位恶意软件的藏身位置