如何在Silverlight应用程序中获取客户端大小?

3

我想获取运行我的Silverlight应用程序的浏览器窗口大小?我尝试了以下几行代码,但它总是返回零!

public Page()
    {
        InitializeComponent();
        Initialize();

    }

    public void Initialize()
    {

        WorldLimits.Y = Application.Current.Host.Content.ActualHeight;
        WorldLimits.X = Application.Current.Host.Content.ActualWidth;

        gameCore = new GameCore(this);
        gameTime = DateTime.Now.TimeOfDay.TotalMilliseconds / 1000;

    }

你在Page.xaml中的UserControl标记长什么样子? - jcollum
我找到了问题所在。你建议添加一个resize事件处理程序,这确实起到了作用。如果你重新发布代码,我可以将其标记为正确答案。 - Stefan
很奇怪,这些值只有在事件处理程序中才可用。嗯,如果它能工作,那就没问题了。 - jcollum
原来这些值是可用的,只是默认情况下设置为零。我猜它们是在InitializeComponent()之后的某个时候设置的。所以你所要做的就是设置一个事件处理程序,一旦这些值实际上正确了,你就可以得到它们了。 - Stefan
1个回答

6
确保在事件处理程序中获取值。
public Page()
{
    InitializeComponent();
    App.Current.Host.Content.Resized += new EventHandler(Content_Resized);
}

void Content_Resized(object sender, EventArgs e)
{    
    this.Width = App.Current.Host.Content.ActualWidth;
    this.Height = App.Current.Host.Content.ActualHeight;
}

这是完整的代码块public Page() { InitializeComponent(); Initialize(); } public void Initialize() { WorldLimits.Y = Application.Current.Host.Content.ActualHeight; WorldLimits.X = Application.Current.Host.Content.ActualWidth; gameCore = new GameCore(this); gameTime = DateTime.Now.TimeOfDay.TotalMilliseconds / 1000; } - Stefan
最好你编辑原来的答案以反映新代码。这通常是我们在这里做的。如果你习惯于论坛,SO可能一开始看起来很奇怪,但实际上它运作得更好。 - jcollum
如果您无法阅读该内容,则会在初始化组件之后发生。 - Stefan
删除答案,应该在评论中。 - jcollum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接