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

由于希望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的变换只依靠当前显示的画面进行变换,所以出现了这种现象。

结论:我也不知道这种情况该如何处理,不晓得有没有达人知道,还请告知,谢拉。

posted on 2008-07-28 14:22  kane  阅读(2013)  评论(2编辑  收藏  举报

导航