Pete Brown在它的BLOG中提到了一个按自定义比例使用silverlight适应IE窗口大小的方法
原文如下:How to Resize a Silverlight 2 App and Keep the Same Aspect Ratio
其核心代码如下( Xaml ):
这是一个很有用的小技巧,所以在这里做一个记号,看看将来是否能用得上:)
原文如下:How to Resize a Silverlight 2 App and Keep the Same Aspect Ratio
其核心代码如下( Xaml ):
<
UserControl
x:Class
="PeteBrown.SilverlightScalingExample.Page"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
>
< Grid x:Name ="LayoutRoot"
Background ="Cornsilk" ShowGridLines ="True"
Width ="400" Height ="300"
RenderTransformOrigin ="0.5 0.5" >
< Grid.RenderTransform >
< ScaleTransform x:Name ="PageScale" ScaleX ="1" ScaleY ="1" />
</ Grid.RenderTransform >
…
</ Grid >
</ UserControl >
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
>
< Grid x:Name ="LayoutRoot"
Background ="Cornsilk" ShowGridLines ="True"
Width ="400" Height ="300"
RenderTransformOrigin ="0.5 0.5" >
< Grid.RenderTransform >
< ScaleTransform x:Name ="PageScale" ScaleX ="1" ScaleY ="1" />
</ Grid.RenderTransform >
…
</ Grid >
</ UserControl >
public
partial
class
Page : UserControl
{
// this is the aspect ratio we want to maintain
// you can specify this all sorts of ways, but the
// easiest is to take the original size and divide
// X by Y (4:3 or 1.333 in this case)
private const double _originalWidth = 400 ;
private const double _originalHeight = 300 ;
private const double _originalAspectRatio =
_originalWidth / _originalHeight;
public Page()
{
InitializeComponent();
// wire up the event handler. This is a great addition
// to silverlight, as you used to have to hook into the
// browser event yourself
SizeChanged += new SizeChangedEventHandler(Page_SizeChanged);
}
void Page_SizeChanged( object sender, SizeChangedEventArgs e)
{
if (e.NewSize.Width < _originalWidth ||
e.NewSize.Height < _originalHeight)
{
// don't shrink
PageScale.ScaleX = 1.0 ;
PageScale.ScaleY = 1.0 ;
}
else
{
// resize keeping aspect ratio the same
if (e.NewSize.Width / e.NewSize.Height > _originalAspectRatio)
{
// height is our constraining property
PageScale.ScaleY = e.NewSize.Height / _originalHeight;
PageScale.ScaleX = PageScale.ScaleY;
}
else
{
// either width is our constraining property, or the user
// managed to nail our aspect ratio perfectly.
PageScale.ScaleX = e.NewSize.Width / _originalWidth;
PageScale.ScaleY = PageScale.ScaleX;
}
}
}
}
{
// this is the aspect ratio we want to maintain
// you can specify this all sorts of ways, but the
// easiest is to take the original size and divide
// X by Y (4:3 or 1.333 in this case)
private const double _originalWidth = 400 ;
private const double _originalHeight = 300 ;
private const double _originalAspectRatio =
_originalWidth / _originalHeight;
public Page()
{
InitializeComponent();
// wire up the event handler. This is a great addition
// to silverlight, as you used to have to hook into the
// browser event yourself
SizeChanged += new SizeChangedEventHandler(Page_SizeChanged);
}
void Page_SizeChanged( object sender, SizeChangedEventArgs e)
{
if (e.NewSize.Width < _originalWidth ||
e.NewSize.Height < _originalHeight)
{
// don't shrink
PageScale.ScaleX = 1.0 ;
PageScale.ScaleY = 1.0 ;
}
else
{
// resize keeping aspect ratio the same
if (e.NewSize.Width / e.NewSize.Height > _originalAspectRatio)
{
// height is our constraining property
PageScale.ScaleY = e.NewSize.Height / _originalHeight;
PageScale.ScaleX = PageScale.ScaleY;
}
else
{
// either width is our constraining property, or the user
// managed to nail our aspect ratio perfectly.
PageScale.ScaleX = e.NewSize.Width / _originalWidth;
PageScale.ScaleY = PageScale.ScaleX;
}
}
}
}
这是一个很有用的小技巧,所以在这里做一个记号,看看将来是否能用得上:)