现在的位置: 首页 > 综合 > 正文

使silverlight适应IE窗口大小的方法

2012年01月19日 ⁄ 综合 ⁄ 共 2270字 ⁄ 字号 评论关闭

原文 http://10rem.net/blog/2008/07/04/how-to-resize-a-silverlight-2-app-and-keep-the-same-aspect-ratio

<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>

 

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;

            }

        }

    }

}

 

抱歉!评论已关闭.