Как вы можете предотвратить мерцание панели приложения на белой теме WP7? - PullRequest
8 голосов
/ 05 января 2012

У меня есть приложение Windows Phone 7.1 Mango, в котором я в основном успешно переопределил встроенные цвета темы.Однако, если пользователь выбрал белую тему, а страница имеет темный фон и темную панель приложения, панель приложения отображается и анимируется на белом фоне, что вызывает раздражающее мерцание.После того, как это сделано, анимация цвета фона получает соответственно темный цвет.

Есть ли способ отключить анимацию панели приложения или установить ее начальный цвет фона анимации?

Посмотрите этот видеозахват проблемы мерцания.

XAML:

<phone:PhoneApplicationPage x:Class="AppBarFlickers.Page1"
                            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                            xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
                            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                            xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
                            mc:Ignorable="d"
                            d:DesignWidth="480"
                            d:DesignHeight="728"
                            SupportedOrientations="Portrait"
                            Orientation="Portrait">
    <Grid Background="Black">
        <Button Content="Toggle App Bar"
                Margin="100,185,100,0"
                VerticalAlignment="Top"
                Click="ButtonClick"
                Foreground="White"
                Background="Black"
                BorderBrush="White" />
    </Grid>
    <phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar BackgroundColor="Black"
                              ForegroundColor="White">
            <shell:ApplicationBarIconButton IconUri="/icon.png"
                                            Text="Button 1" />
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>
</phone:PhoneApplicationPage>

Код:

public partial class Page1
{
   public Page1()
   {
       InitializeComponent();
   }

   private void ButtonClick(object sender, RoutedEventArgs e)
   {
       ApplicationBar.IsVisible = !ApplicationBar.IsVisible;
   }
}

1 Ответ

19 голосов
/ 06 января 2012

Похоже, что фон не загружен, пока скрывается панель приложений.Он скрывает полосу, , затем загружает фон, отсюда и мерцание.

Найден обходной путь: установите непрозрачность панели приложения равной 0,99.Он достаточно высок, чтобы прозрачность была невидимой, и заставит приложение загружать фон.

<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar BackgroundColor="Black" ForegroundColor="White" Opacity=".99" >
        <shell:ApplicationBarIconButton IconUri="/icon.png" Text="Button 1" />
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>
...