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的变换只依靠当前显示的画面进行变换,所以出现了这种现象。
结论:我也不知道这种情况该如何处理,不晓得有没有达人知道,还请告知,谢拉。
设置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的变换只依靠当前显示的画面进行变换,所以出现了这种现象。
结论:我也不知道这种情况该如何处理,不晓得有没有达人知道,还请告知,谢拉。
相关文章推荐
- SSAS实践问题记录--后端数据库访问模块中存在错误。 为绑定指定的大小太小,导致一个或多个列值被截断。
- 关于Silverlight自适应窗口大小的问题!
- echarts学习总结(二):一个页面存在多个echarts图形,图形自适应窗口大小
- echarts学习总结(二):一个页面存在多个echarts图形,图形自适应窗口大小
- echarts学习总结一个页面存在多个echarts图形,图形自适应窗口大小
- 比着一切更重要的是:你的产品真正的解决了一个现实存在的问题吗?!!!
- Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- 一个可能存在Bug的二分查找方法的实现,大家一起看看有什么问题没
- 我有一个方案,但不知道存在的问题,优点我知道。
- 一个兼容多种场合的Javascript图片大小自适应function
- 问题:利用输入输出流重载实现一个整数数组的输入和输出。 要求:输入一个数组大小 及 所有元素的值,排序后输出该数组的所有元素。
- mongodb 复制集中存在的一个问题
- 一个关于邮件大小的有趣的问题
- 一个关于无边框拉大小的问题
- 一个程序中关于多个osgGA::GUIEventHandler同时存在的问题
- WebView 图片大小自适应问题
- iframe标签的内部关闭存在一个问题(未知原因)
- 一个问题:物理内存有限的情况下,多个进程存在时,每个进程实际分配的物理内存有多少?(如果某程序申请了很大的动态存储空间)
- Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- Silverlight开发常见的一个小问题:2103错误