2011-02-01 70 views
1

我正在尝试将浏览器外(OOB)Silverlight应用程序移到系统托盘上方的右下角。该应用的尺寸为160x100。如何将我的Silverlight OOB窗口放置在桌面的右下角?

我只是不能接近足够的屏幕底部。当我将“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! 
    } 
} 

如果该值大于602,用于窗口样式=“默认”设置App.Current.MainWindow.Top被忽略,或大于640对于Window Style ='无边框'。

如果我在603以上设置'Top'值,它只是默默地默认为项目设置(我的例子中为50)的Out-Of-Browser Settings对话框中指定的Top。没有例外被抛出。

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

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

为什么我无法将窗口继续向下移动到屏幕上?

是否有任何其他方法可以让我的窗口显示为“停靠”在屏幕的右下角?

谢谢!

更新: 我应该提到:

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

你应该根据屏幕的大小来计算`Left`和`Top`值而不是硬编码,将需要改变的值不同的屏幕分辨率 – ChrisF 2011-02-01 15:49:27

+0

谢谢@ChrisF,我应该提到(a)我不会在我的应用程序中硬编码顶/左值,我只是在上面的代码片段中做了解释, (b)我想检测屏幕/桌面大小,但找不到在Silverlight中执行此操作的方法。 – 2011-02-02 16:09:37

回答

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

试试这个:

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

但使用尝试捕捉

相关问题