我无法让这个动画工作,我错过了什么?我基本上只想在一秒钟后动画图像动画为模糊图像:
以下是 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);
};
}
答案 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);