Uwp 合成-为什么我的元素会立即在动画上设置模糊?

Uwp 合成-为什么我的元素会立即在动画上设置模糊?,uwp,windows-composition-api,xaml-composition,Uwp,Windows Composition Api,Xaml Composition,我的示例应用程序有以下Xaml来演示该问题: <Page x:Class="App1.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App1" xmlns:d="http://schemas.microsof

我的示例应用程序有以下Xaml来演示该问题:

<Page x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="#F5DEB3">

    <Border x:Name="MyBorder"
            HorizontalAlignment="Center"
            VerticalAlignment="Center">
        <Image Stretch="Uniform"
            Width="165"
            Height="100"
            Source="/Assets/abstract.png" />
    </Border>
</Page>

以下是我的代码:

using Windows.UI.Composition;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Hosting;

namespace App1
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            this.Loaded += MainPage_Loaded;
        }

        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            var scalar = Window.Current.Compositor.CreateScalarKeyFrameAnimation();

            scalar.InsertKeyFrame(1.0f, 24f);
            scalar.DelayTime = TimeSpan.FromMilliseconds(1500);
            scalar.Duration = TimeSpan.FromMilliseconds(3000);

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

            var effectFactory = Window.Current.Compositor.CreateEffectFactory(effect, new[] { "Blur.BlurAmount" });
            var brush = effectFactory.CreateBrush();
            var sprite = Window.Current.Compositor.CreateSpriteVisual();

            sprite.Brush = brush;
            sprite.Size = new Vector2((float)MyBorder.ActualWidth, (float)MyBorder.ActualHeight);

            ElementCompositionPreview.SetElementChildVisual(MyBorder, sprite);

            var destinationBrush = Window.Current.Compositor.CreateBackdropBrush();
            brush.SetSourceParameter("Backdrop", destinationBrush);

            brush.StartAnimation("Blur.BlurAmount", scalar);
        }
    }
}
使用Windows.UI.Composition;
使用Windows.UI.Xaml;
使用Windows.UI.Xaml.Controls;
使用Windows.UI.Xaml.Hosting;
名称空间App1
{
/// 
///可以单独使用或在框架内导航到的空页。
/// 
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
this.Loaded+=主页面_Loaded;
}
已加载私有void主页(对象发送方、路由目标)
{
var scalar=Window.Current.Compositor.CreateScalarKeyFrameAnimation();
标量插入关键帧(1.0f,24f);
scalar.DelayTime=TimeSpan.From毫秒(1500);
scalar.Duration=TimeSpan.From毫秒(3000);
var效应=新的GaussianBrueffect()
{
Name=“Blur”,
Source=新的CompositionEffectSourceParameter(“背景”),
BorderMode=EffectBorderMode.Hard,
};
var effectFactory=Window.Current.Compositor.CreateEffectFactory(effect,new[]{“Blur.BlurAmount”});
var brush=effectFactory.CreateBrush();
var sprite=Window.Current.Compositor.CreateSpriteVisual();
sprite.Brush=画笔;
sprite.Size=newvector2((float)MyBorder.ActualWidth,(float)MyBorder.ActualHeight);
ElementCompositionPreview.SetElementChildVisual(MyBorder,sprite);
var destinationBrush=Window.Current.Compositor.CreateBackdropBrush();
画笔。设置画笔参数(“背景”,目的画笔);
画笔.StartAnimation(“Blur.BlurAmount”,标量);
}
}
}

当应用程序运行时,应该等待1.5秒,然后开始模糊图像。但是,当您运行代码时,图像上已经设置了初始模糊(轻微模糊)。有人知道为什么吗?

稍微修改一下代码。试试这个。我不知道为什么需要将
BlurAmount
设置为零,但可能新的
GaussianBlurEffect
已将该值设置为其他值

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

有关此问题的更多信息,其行为如此的原因以及在上述答案中以BlurAmount=0开头的原因是因为BlurAmount的默认值为3.0f:


任何需要调整大小的图像看起来都有点模糊。这不是根本问题,删除动画代码,它看起来就不那么模糊了。是的,这就是解决办法!哇,我没想到会有这种奇怪的行为。谢谢