如何防止在WP7白色主题下应用栏闪烁?

8
我有一个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

看起来在隐藏ApplicationBar时背景没有加载。它会先隐藏ApplicationBar,然后再加载背景,因此会出现闪烁。

找到了一个解决方法:将applicationbar的不透明度设置为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>

1
当然,+25声望分给你。这也解释了为什么它不会在没有纯色背景的屏幕上执行,因为我在那里有一个透明的应用程序栏。谢谢! - bkaid
1
你们是怎么知道这些东西的呢?:-) - Shashi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接