FillRate并通过Window Phone Mango中的UserControl设置背景图像

时间:2011-12-03 06:15:21

标签: silverlight windows-phone-7 silverlight-4.0 expression-blend windows-phone-7.1

我正在开发Window Phone 7.5(Mango)的Silverlight应用程序。我是一个新手,这是我的第一个应用程序。当我在模拟器中运行它时,我看到FillRate计数器就像4.5或5和红色。所以这是一个问题。花了一些时间后,我发现我在Main.xaml和其他页面上的UserControl已经或者是一个问题。

BackgroundUC.x​​aml :这是由Blend中的设计人员完成的。它有一个从右到左移动的天空图像。除此之外,我不知道代码的含义。此控件用于在所有页面上用作移动背景。

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:eim="clr-namespace:Microsoft.Expression.Interactivity.Media;assembly=Microsoft.Expression.Interactions"
    mc:Ignorable="d"
    x:Class="MyApp.BackgroundUC"
    d:DesignWidth="2872" d:DesignHeight="520">
    <UserControl.Resources>
        <Storyboard x:Name="sbSkyBg">
            <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="SkyBg" d:IsOptimized="True"/>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="SkyBg">
                <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                <EasingDoubleKeyFrame KeyTime="0:1:0" Value="-930"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Image x:Name="SkyBg" Source="SkyBg.png" Stretch="Fill" d:LayoutOverrides="VerticalAlignment, GridBox" RenderTransformOrigin="0.5,0.5">
            <Image.RenderTransform>
                <CompositeTransform/>
            </Image.RenderTransform>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Loaded">
                    <eim:ControlStoryboardAction Storyboard="{StaticResource sbSkyBg}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Image>
    </Grid>
</UserControl>

我发现的内容:如果我不使用此UserControl但将MainPage.xaml的LayOutRoot Grid的Backgrond设置为我的天空图像(静态),则FillRate会降至1.5。但有了这个,我将不得不在每个页面上单独设置网格的背景。而且我不确定如何制作动画以产生移动的天空效果。

问题: 1:UC有什么问题,如何调整我的UC,使FillRate在最佳范围内,即<2.5?

2:如果UC本身是一个问题,我的场景中最好的方法是什么,所以我可以拥有一些动画的共同背景?

3:如果我必须像上面提到的那样在单个页面级别进行操作,我该如何为这样的背景设置设置动画:

<Grid.Background>
            <ImageBrush ImageSource="/MyApp;component/SkyBg.png" />
</Grid.Background>

我还在学习,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

有一些提示,我想到了你的问题:

  1. 将图像从2872像素缩小为&lt; 2048(最大纹理缓冲区大小)。它将有助于使用GPU渲染你的天空。
  2. 删除UserControl中的其他Grid,将Image设为树的根目录。
  3. 在您的UserControl上启用所有页面上的图像缓存(ImageCache ='BitmapCache')
  4. 希望它有助于提高性能