您的位置:首页 > 其它

Silverlight的大小自适应中存在的一个问题

2008-07-28 14:22 204 查看
由于希望Silverlight程序在浏览器中可以随着浏览器的大小而自适应,以便给客户带来更好的体验,在网上搜索了一下代码,大概原理是:

设置SilverlightHost的大小为100%(这在Silverlight2 beta2中似乎已经自动设置了,程序的大小为640*480)

public partial class Page : UserControl

{

public Page()

{

// Required to initialize variables

InitializeComponent();

Application.Current.Host.Content.Resized += new EventHandler(BrowserHost_Resize);

}

private void BrowserHost_Resize(object sender, EventArgs e)

{

Content contentObject = Application.Current.Host.Content;

double xscale = contentObject.ActualWidth / this.Width;

double yscale = contentObject.ActualHeight / this.Height;

ScaleTransform scale = new ScaleTransform();

scale.ScaleX = xscale;

scale.ScaleY = yscale;

RenderTransform = scale;

}

通过以前代码可以实现Silverlight程序随着浏览器的大小而变化了,可是在实际应用发现,实际上这样只能实现Silverlight程序随着浏览器变大,而不是能缩小。也就是说当浏览器的容器的大小大于Silverlight原始大小时,Silverlight程序随之变大,但当浏览器容器的大小小于Silverlight程序的原始大小时,会出现Silverlight程序显示不全的情况,如下图所示:



图1



图2

在图1中可看出,当Host的尺寸大于程序大小时,显示正常,而在图2中则消失了一部分。

经过分析,我认为是因为Rezised事件是后于浏览器大小变化而激发的,但此时浏览器已经遮挡了一部分程序画面,而Transform的变换只依靠当前显示的画面进行变换,所以出现了这种现象。

结论:我也不知道这种情况该如何处理,不晓得有没有达人知道,还请告知,谢拉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐