如何使用xaml将WPF应用程序windowstartuplocation设置到右上角?

时间:2012-09-25 20:11:08

标签: wpf

我只想将windowstartuplocation设置到桌面的右上角。现在要澄清一些事情,我看到这个帖子有同样的问题:

Changing the start up location of a WPF window

现在我不想对他们所说的右或左的内容感到困惑,我希望我的应用程序从右上角开始,右边指的是我的右侧(不像我的桌面是一个人看起来在我和它右边)。所以,

1.)仅将left和top设置为0不是解决方案(将应用程序带到左侧不对)

2.)我尝试使用SystemParameters.PrimaryScreenWidth,但我无法执行操作以在绑定时从此值中减去我的应用程序的宽度。

有没有办法可以做到这一点而不会变得太复杂?

2 个答案:

答案 0 :(得分:18)

  

有没有办法可以做到这一点而不会变得太复杂?

最简单的方法是手动设置起始位置,然后在代码后面设置Left属性:

<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" 
    Top="0">
</Window> 

在你的代码背后:

public Window1()
{
    InitializeComponent();
    this.Left = SystemParameters.PrimaryScreenWidth - this.Width;
}

在这个地方,我觉得在代码中执行它的简单性超过了引入代码背后的任何缺点。

答案 1 :(得分:0)

通过使用WorkArea.Width确保考虑任务栏的宽度(当放置在侧面,左侧或右侧时)。通过使用this.Width或this.MaxWidth确保您的窗口永远不会滑到工作区域之外,但两者都要求设置它们的值(在xaml或后面的代码中),以便不为此生成值NaN(非数字).Left

public MainWindow()
    {
        InitializeComponent();
        this.Left = SystemParameters.WorkArea.Width - this.MaxWidth;
    }

<Window
    ... more code here ...
    WindowStartupLocation="Manual" Top="0" MaxWidth="500" >