zoukankan      html  css  js  c++  java
  • 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的变换只依靠当前显示的画面进行变换,所以出现了这种现象。

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

  • 相关阅读:
    iOS中的事件传递和响应者链条
    iOS多线程--NSOperation
    Objective-C—— @Property详解
    iOS网络——NSURLCache设置网络请求缓存
    Objective-C—— Block
    iOS多线程——GCD篇
    Objective-C设计模式——中介者Mediator(对象去耦)
    Objective-C设计模式——外观Faced(接口适配)
    Objective-C设计模式——桥接Bridge(接口适配)
    Objective-C设计模式——适配器Adapter(接口适配)
  • 原文地址:https://www.cnblogs.com/Kane/p/1254762.html
Copyright © 2011-2022 走看看