【问题标题】:How do you get the client size in a Silverlight Application?如何在 Silverlight 应用程序中获取客户端大小?
【发布时间】:2009-07-15 17:42:53
【问题描述】:

我想获得运行我的 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 标记是什么样的?
  • 我确实发现了问题。您提出的调整大小事件处理程序的建议起到了作用。如果您重新发布代码,我可以将其标记为正确答案。
  • 奇怪的是,除了事件处理程序之外,这些值不可用。嗯,如果它有效,那么就是这样。
  • 原来这些值是可用的,默认情况下它们只是设置为零。我猜它们是在 InitializeComponent() 之后的某个时间设置的。所以你所要做的就是设置一个事件处理程序,一旦它们真正正确,你就会得到它们。

标签: silverlight


【解决方案1】:

确保您在事件处理程序中获取值

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();初始化(); } public void Initialize() { WorldLimits.Y = Application.Current.Host.Content.ActualHeight; WorldLimits.X = Application.Current.Host.Content.ActualWidth;游戏核心 = 新游戏核心(这个);游戏时间 = DateTime.Now.TimeOfDay.TotalMilliseconds / 1000; }
  • 如果您编辑原始答案以反映新代码会更好。这通常是我们在这里做的。如果您习惯于论坛,那么一开始可能看起来很奇怪,但实际上效果会更好。
  • 如果你看不懂,它确实发生在初始化组件之后
  • 正在删除答案,应该在 cmets
猜你喜欢
  • 2010-11-12
  • 2018-01-31
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2012-11-10
相关资源
最近更新 更多