none
SL4,启用了Out Of Browser后,无法设置宿主的位置? RRS feed

  • 问题

  • SL4,启用了Out Of Browser后,生成的 OutOfBrowserSettings.xml 文件是这样的

    <OutOfBrowserSettings.WindowSettings>
        <WindowSettings Title="SilverlightApplication1 Application" Height="400" Width="600" Top="0" Left="0" WindowStartupLocation="Manual" WindowStyle="None" />
      </OutOfBrowserSettings.WindowSettings>

    在程序中,我定义了一个按钮事件,点击后执行以下代码

    Application.Current.MainWindow.Width = 200;
    Application.Current.MainWindow.Left = 20;

    编译正常通过,安装到本地后,点击按钮,也看到这两条语句都执行了,但是第一句设置宽度生效,第二句设置Left属性不生效,请教这是什么原因造成的,如何解决?

    2010年5月7日 8:16

答案

全部回复

  • 那个Left可能是基于IE窗口的……

    My blog: http://blog.csdn.net/dotfun http://dotfun.cnblogs.com

    My contact: QQ:372900288 E-mail:372900288@qq.com msn:sellnet007@hotmail.com


    《银光志--Silverlight 3.0开发详解与最佳实践》
    2010年5月8日 15:19
    版主
  • 不可能,前面已经说明了是MainWindow,而且Width属性还是生效的,如果是IE的话,估计会报 必须在浏览器外运行 类似这样的错误

    2010年5月10日 1:16
  • 你好,

          第2条语句的使用时有一定限制的,下边这段是从MSDN里摘录的。

        You can set this property at run time only if WindowStartupLocation is set to Manual. Additionally, you can set this property at run time only before the end of the Application..::.Startup event, after which any changes are ignored. For example, you can save the current value to isolated storage in an Application..::.Exit event handler and restore the value in an Application..::.Startup event handler.

     

    2010年5月13日 5:21
  • 是的,经过反复测试,我发现在运行以后,的确是不能再通过设置Left和Top属性来改变其位置了,但是有趣的是,我误打误撞地找到了另一种方法可以更改它的Left和Top属性,同时也可以更改Width和Height这两个属性,现在把方法分享一下
    Application.Current.MainWindow.SetValue(OutOfBrowserSettings.WindowSettingsProperty, new Window() { Width = 200, Height = 200, Left = 100, Top = 100 });

    这样设置以后,四个属性都可以变更了,但是此方法还是有问题,当Left与Top属性设置超过一定的值时,值会被忽略,具体研究发现,当Top的值加上Height,超过屏蔽分辨率时,该值被忽略。不过以上问题想想也算了,也还可以理解。

    现在碰到的新问题是,当我的页面跳转后,调用Application.Current.MainWindow.Close()方法时,会引起sllauncher.exe关闭,并且捕捉不到任何错误!这对我是个严重的打击,本想用SL+COM组件的方法实现一个客户端,如果此类问题存在,这个肯定是不可行的了,不知各位可有什么好的建议?

    2010年5月14日 1:48