FillRate и настройка фонового изображения через UserControl в Window Phone Mango - PullRequest
0 голосов
/ 03 декабря 2011

Я разрабатываю приложение Silverlight для Window Phone 7.5 (Mango).Я новичок, и это мое первое приложение.Когда я запускаю его в эмуляторе, я вижу, что счетчик FillRate имеет значение 4,5 или 5 и красный.Так что это проблема.Потратив некоторое время, я обнаружил, что пользовательский контроль на моем Main.xaml и других страницах имеет или является проблемой.

BackgroundUC.xaml : Это сделано дизайнером в 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, но устанавливаю Backgrond сетки LayOutRoot сетки MainPage.xaml.на моем изображении неба (статическое) FillRate падает до 1,5.Но с этим мне придется установить фон сетки на каждой странице в отдельности.И я не уверен, как анимировать это, чтобы получить эффект движущегося неба.

Вопросы: 1: Что не так в UC и как я могу настроить свой UC так, чтобы FillRate былв пределах оптимального диапазона, т. е. <2,5? </p>

2: Если сам UC является проблемой, каков наилучший способ в моем сценарии, чтобы я мог иметь общий фон с некоторой анимацией?

3: ЕслиЯ должен сделать на уровне отдельных страниц, как я упоминал выше, как я могу анимировать набор фона следующим образом:

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

Я все еще учусь, и любая помощь действительно ценится.

1 Ответ

1 голос
/ 03 декабря 2011

Мне пришло несколько советов по поводу вашей проблемы:

  1. Уменьшите размер изображения с 2872 пикселей до <2048 (максимальный размер буфера текстур).Это поможет использовать графический процессор для визуализации вашего неба. </li>
  2. Удалите дополнительную Grid в вашем UserControl, сделайте Image корнем дерева.
  3. Включите кэш изображений (ImageCache = 'BitmapCache') на всехваших страниц в UserControl

Надеюсь, это поможет повысить производительность

...