这应该能帮助你开始创建你想要的效果。你需要使用由Microsoft赞助的UWP Community Toolkit库。它拥有下面你将看到的令人惊叹的动画语法,并在内部使用Composition API。根据你的需要调整模糊、缩放和淡入淡出等参数。
XAML
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid Width="200" Height="200" HorizontalAlignment="Center" VerticalAlignment="Center" PointerEntered="Grid_PointerEntered" PointerExited="Grid_PointerExited">
<Image x:Name="imageBackdrop" Source="Assets/image.jpg" Opacity="0"/>
<Image x:Name="image" Source="Assets/image.jpg"/>
</Grid>
</Grid>
C#
using Microsoft.Toolkit.Uwp.UI.Animations;
private void Grid_PointerEntered(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
imageBackdrop.Fade(0.5f, 50).Scale(1.1f, 1.1f,0,0,0).Blur(75, 0).Offset(0, 20, 0).Start();
}
private void Grid_PointerExited(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
imageBackdrop.Opacity = 0;
}
编辑:更容易的方法是使用一个容器在XAML中进行缩放。同时,在与模糊效果相同的元素上添加不透明度效果似乎会使模糊效果的模糊程度达到非常低的模糊量。使用类似于这样的东西与不透明度掩码或其他东西结合使用,可以使其变暗并且边缘变得柔和:
private void Grid_PointerEntered(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
var element = imageBackdrop;
var visual = ElementCompositionPreview.GetElementVisual(element);
var compositor = visual.Compositor;
var effect = new GaussianBlurEffect()
{
Name = "Blur",
Source = new CompositionEffectSourceParameter("EffectSource"),
BlurAmount = 50f,
BorderMode = EffectBorderMode.Soft,
};
var blurEffectFactory = compositor.CreateEffectFactory(effect, new[] { effect.Name + "." + nameof(effect.BlurAmount) });
var brush = blurEffectFactory.CreateBrush();
var destinationBrush = compositor.CreateBackdropBrush();
brush.SetSourceParameter("EffectSource", destinationBrush);
var sprite = compositor.CreateSpriteVisual();
sprite.Size = new Vector2((float)(element.RenderSize.Width), (float)(element.RenderSize.Height));
sprite.Brush = brush;
ElementCompositionPreview.SetElementChildVisual(element, sprite);
imageBackdropContainer.Opacity = 1;
}
private void Grid_PointerExited(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
imageBackdropContainer.Opacity = 0;
}
![enter image description here](https://istack.dev59.com/O1wgJ.webp)