使silverlight适应IE窗口大小的方法
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;
}
}
}
}
这是一个很有用的小技巧,所以在这里做一个记号,看看将来是否能用得上:)