我无法设置模糊动画(UWP Composition Api)

时间:2017-10-26 15:11:49

标签: c# .net uwp

我无法让这个动画工作,我错过了什么?我基本上只想在一秒钟后动画图像动画为模糊图像:

以下是 XAML

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Image x:Name="TestImage"
           Source="Assets/test.jpg"
           Stretch="Uniform"
           Margin="100">
    </Image>
</Grid>

以下是相关的 CODE-BEHIND

public MainPage()
{
    this.InitializeComponent();

    TestImage.Loaded += (sender, e) =>
    {
        var element = sender as UIElement;
        var visual = ElementCompositionPreview.GetElementVisual(element);
        var compositor = visual.Compositor;

        var effect = new GaussianBlurEffect()
        {
            Name = "Blur",
            Source = new CompositionEffectSourceParameter("Backdrop"),
            BlurAmount = 0f,
            BorderMode = EffectBorderMode.Hard,
        };

        var blurEffectFactory = compositor.CreateEffectFactory(effect, new[] { "Blur.BlurAmount" });
        var brush = blurEffectFactory.CreateBrush();
        var destinationBrush = compositor.CreateBackdropBrush();

        brush.SetSourceParameter("Backdrop", destinationBrush);

        var sprite = compositor.CreateSpriteVisual();
        sprite.Brush = brush;

        var anim = compositor.CreateScalarKeyFrameAnimation();
        anim.InsertKeyFrame(0.0f, 0f);
        anim.InsertKeyFrame(1.0f, 50f);
        anim.Duration = TimeSpan.FromSeconds(1);

        ElementCompositionPreview.SetElementChildVisual(element, sprite);

        sprite.Brush.StartAnimation("Blur.BlurAmount", anim);
    };
}

2 个答案:

答案 0 :(得分:1)

更改

sprite.Brush.StartAnimation("Blur.BlurAmount", anim);

sprite.Brush.Properties.StartAnimation("Blur.BlurAmount", anim);

<强>更新 好。我发现了这个问题。您没有为背景SpriteVisual设置尺寸。 添加到您的代码:

sprite.Size = new Vector2(1000, 1000);

默认情况下为零。

答案 1 :(得分:1)

Size没有SpriteVisual,因此您无法看到模糊,您需要为其设置Size,例如:

var sprite = compositor.CreateSpriteVisual();
sprite.Brush = brush;
sprite.Size = new Vector2(500, 500);