【问题标题】:Changing the start up location of a WPF window更改 WPF 窗口的启动位置
【发布时间】:2010-12-05 10:33:44
【问题描述】:

我想在屏幕的右上角打开一个 WPF 窗口。

现在我可以通过打开窗口然后移动它来实现这一点(通过 user32.dll 中的 movewindow)。但是,这种方法意味着窗口在其默认位置打开,完全加载,然后移动到右上角。

我该如何更改它以指定窗口的初始位置和大小?

【问题讨论】:

    标签: wpf window wpf-positioning


    【解决方案1】:

    只需在 xaml 中设置 WindowStartupLocation、Height、Width、Left 和 Top:

    <Window x:Class="WpfApplication1.Window1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="Window1" 
        Height="500" Width="500"
        WindowStartupLocation="Manual" 
        Left="0" Top="0">
    </Window>
    

    【讨论】:

    • 谢谢!!我知道它必须简单,但我当然试图找到复杂的解决方案:)。
    • 太棒了!这就是我要找的win.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    【解决方案2】:

    对于像我这样想将窗口位置设置为当前鼠标位置的人,你可以这样做:

    myWindow.WindowStartupLocation = WindowStartupLocation.Manual;
    myWindow.Left = PointToScreen(Mouse.GetPosition(null)).X;
    myWindow.Top = PointToScreen(Mouse.GetPosition(null)).Y;
    

    【讨论】:

    • 我收到一个错误:System.InvalidOperationException: 'This Visual is not connected to a PresentationSource.'
    • 嗨杰森!虽然我不知道你的问题的根源,但我认为这个线程可能有一些有用的答案:stackoverflow.com/questions/2154211/…。似乎视觉需要可见才能使 PointToScreen 工作。 Drew Noakes 有这个问题的解决方案:“我发现你可以在调用 PointFromScreen 之前测试 IsVisible 以防止 InvalidOperationException。”。希望这会有所帮助。
    【解决方案3】:

    我喜欢用WindowStartupLocation="CenterOwner" (MSDN docs for it)

    调用者需要将自己指定为所有者才能使其正常工作,例如:

    new MyWindow() { Owner = this }.ShowDialog();
    

    然后只定义窗口的高度和宽度,例如:

    <Window ...
         Height="400" Width="600"
         WindowStartupLocation="CenterOwner"
    >
    ...
    

    【讨论】:

      【解决方案4】:

      Window有一个属性,叫做"WindowStartupLocation" 您可以在属性窗口中找到它。只需在构造函数中选择 Window,然后转到属性列表。搜索"Startup" 或类似的东西,您可以找到该属性。将其更改为 "CenterScreen" 即可达成交易。 笔记!确保您没有选择网格而不是窗口!否则你会失败的。

      或者你可以像一些人之前写的那样通过 XAML 编辑来完成。

      【讨论】:

      • 在我的情况下,我没有任何窗口。我只是使用 stackpanel,所以我该如何使用它?
      【解决方案5】:

      这对我有用(屏幕上的位置不同):

      <Window x:Class="BtnConfig.MainWindow"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:local="clr-namespace:BtnConfig"
              mc:Ignorable="d"
              Title="MainWindow" Height="142.802" Width="448.089"
              Top="288" Left="0"> 
      </Window>
      

      注意它不包含:

      WindowStartupLocation="Manual" 
      

      【讨论】:

        猜你喜欢
        • 2010-12-05
        • 2016-06-23
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多