Silverlight的大小自适应中存在的一个问题
由于希望Silverlight程序在浏览器中可以随着浏览器的大小而自适应,以便给客户带来更好的体验,在网上搜索了一下代码,大概原理是:
设置SilverlightHost的大小为100%(这在Silverlight2 beta2中似乎已经自动设置了,程序的大小为640*480)
 public partial class Page : UserControl
    public partial class Page : UserControl {
    { public Page()
        public Page() {
        { // Required to initialize variables
            // Required to initialize variables InitializeComponent();
            InitializeComponent(); Application.Current.Host.Content.Resized += new EventHandler(BrowserHost_Resize);
            Application.Current.Host.Content.Resized += new EventHandler(BrowserHost_Resize); }
        } private void BrowserHost_Resize(object sender, EventArgs e)
        private void BrowserHost_Resize(object sender, EventArgs e) {
        { Content contentObject = Application.Current.Host.Content;
            Content contentObject = Application.Current.Host.Content; double xscale = contentObject.ActualWidth / this.Width;
            double xscale = contentObject.ActualWidth / this.Width; double yscale = contentObject.ActualHeight / this.Height;
            double yscale = contentObject.ActualHeight / this.Height; ScaleTransform scale = new ScaleTransform();
            ScaleTransform scale = new ScaleTransform(); scale.ScaleX = xscale;
            scale.ScaleX = xscale; scale.ScaleY = yscale;
            scale.ScaleY = yscale; RenderTransform = scale;
            RenderTransform = scale;
 }
        } 
通过以前代码可以实现Silverlight程序随着浏览器的大小而变化了,可是在实际应用发现,实际上这样只能实现Silverlight程序随着浏览器变大,而不是能缩小。也就是说当浏览器的容器的大小大于Silverlight原始大小时,Silverlight程序随之变大,但当浏览器容器的大小小于Silverlight程序的原始大小时,会出现Silverlight程序显示不全的情况,如下图所示:

图1

 
图2
在图1中可看出,当Host的尺寸大于程序大小时,显示正常,而在图2中则消失了一部分。
经过分析,我认为是因为Rezised事件是后于浏览器大小变化而激发的,但此时浏览器已经遮挡了一部分程序画面,而Transform的变换只依靠当前显示的画面进行变换,所以出现了这种现象。
结论:我也不知道这种情况该如何处理,不晓得有没有达人知道,还请告知,谢拉。
 
                     
                    
                 
                    
                 
    
 
         
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号