如何将Silverlight OOB窗口定位到桌面的右下角?

时间:2011-02-01 15:41:52

标签: silverlight silverlight-4.0 silverlight-oob

我正在尝试将一个Out-of-browser(OOB)Silverlight应用程序移动到系统托盘上方的右下角。该应用程序的大小为160x100。

我无法让它足够接近屏幕的底部。当我将“Top”属性设置为高于某个值时,它就会被忽略。

例如在我的App.xaml.cs中:

private void Application_Startup(object sender, StartupEventArgs e)
{
    this.RootVisual = new MainPage();
    if (App.Current.HasElevatedPermissions &&
        App.Current.IsRunningOutOfBrowser)
    {
        Window w = App.Current.MainWindow;
        w.Width = 160;
        w.Height = 100;
        w.Left = 1108;
        // Up to this point the above all works ok.
        w.Top = 603; // This is ignored if over 602!
    }
}

如果Window Style ='Default'的值大于602,或者Window Style ='No Border'的值大于640,则忽略设置App.Current.MainWindow.Top。

如果我将'Top'值设置为603以上,它只是默认默认为Project设置中的Out-Of-Browser Settings对话框中指定的Top(在我的情况下为50)。没有例外。

'Left'属性似乎没有这个问题:我可以设置Left将窗口向右移动到屏幕的右侧。

我正在使用Windows XP SP3和Silverlight 4.0 / VS2010。我已经检查了“在浏览器外部运行时需要提升的信任”框。

为什么我无法在屏幕上进一步向下移动窗口?

有没有其他方法可以让我的窗口“停靠”在屏幕的右下角?

谢谢!

更新的 我应该提到:

  • 我已在“浏览器外设置”对话框中选中了“手动设置窗口位置”框。在这里设置Top / Left属性(而不是在代码中),结果是相同的:如果我将'Top'设置为超过640的值(窗口样式='无边框'),则窗口位于中间桌面,而不是指定的坐标。
  • 我没有在我的应用中将Top / Left设置为硬编码值 - 我在上面的代码片段中这样做只是为了说明问题。在实际的应用程序中,我让用户移动窗口,然后在应用程序退出时保存位置。
  • 我想检测屏幕/桌面大小,但无法在Silverlight中找到方法。

2 个答案:

答案 0 :(得分:1)

您需要设置WindowStartupLocation to Manual

<OutOfBrowserSettings.WindowSettings>  
    <WindowSettings Title="Silverlight Application"   
                    WindowStartupLocation="Manual"  
                    Left="0"  
                    Top="0"  
                    Width="640"  
                    Height="480"/>  
  </OutOfBrowserSettings.WindowSettings> 

如果需要,您还可以通过代码访问OutOfBrowserSettings.WindowSettings

答案 1 :(得分:1)

试试这个:

    Window w = App.Current.MainWindow;
    w.Width = 1;
    w.Height = 1;
    w.Left = 1108;        
    w.Top = 603; 
    w.Width = 160;
    w.Height = 100;

但请使用try catch