如何动画Windows Phone 8.1 AppBar背景色?

时间:2014-09-09 16:49:52

标签: xaml animation windows-runtime winrt-xaml windows-phone-8.1

我似乎无法使用AppBar获取ColorAnimation的背景色。

<Storyboard x:Name="FadeColorStoryboard">
    <ColorAnimation
        Storyboard.TargetName="bar"
        Storyboard.TargetProperty="(Control.Background).(SolidColorBrush.Color)"
        From="Yellow" To="Green" Duration="0:0:1" />
</Storyboard>

我通过动画TextBlock的前景色来测试故事板,但它确实有效。我有任何方式可以动画AppBar的背景颜色吗?

我也尝试使用自定义附加属性来更改背景颜色,但我不能将故事板的TargetProperty设置为自定义附加属性,这与Silverlight不同。

1 个答案:

答案 0 :(得分:4)

好的,所以我想出了一个解决方案。它不是最好的解决方案,但它可以满足我的需求。如果有更好的方法,我仍然感兴趣,但现在这样做。

编辑:忘记提及,由于某种原因,EnableDependentAnimation要求ColorAnimation设置为true。

我已将CommandBar子类化,并添加了我自己的BackgroundColor属性,该属性可以设置动画。

class CommandBarEx : CommandBar
{
    public Color BackgroundColor
    {
        get { return (Color)GetValue(BackgroundColorProperty); }
        set { SetValue(BackgroundColorProperty, value); }
    }

    public static readonly DependencyProperty BackgroundColorProperty =
        DependencyProperty.Register("BackgroundColor", typeof(Color), typeof(CommandBarEx), new PropertyMetadata(Colors.Gray, onBackgroundColorPropertyChanged));

    static void onBackgroundColorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var bar = d as CommandBarEx;
        if (bar == null)
            return;

        var brush = bar.Background as SolidColorBrush;
        if (brush == null)
        {
            bar.Background = new SolidColorBrush((Color)e.NewValue);
        }
        else
        {
            brush.Color = (Color)e.NewValue;
            bar.Background = brush;  // force property change event
        }
    }
}