<Page x:Class="Win2DDemo.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Win2DDemo" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Unloaded="Page_Unloaded" > <Grid x:Name="root"> <canvas:CanvasControl x:Name="canvasControl" CreateResources="CanvasControl_CreateResources" Draw="canvasControl_Draw" ClearColor="CornflowerBlue" /> <!--<controls2:DropShadowPanel Color="Black" OffsetX="-50" OffsetY="-50" BlurRadius="50" ShadowOpacity=".7" Width="120" Height="120" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> <Ellipse /> </controls2:DropShadowPanel>--> </Grid> </Page>
using Microsoft.Graphics.Canvas; using Microsoft.Graphics.Canvas.Effects; using Microsoft.Graphics.Canvas.UI.Xaml; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Numerics; using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using Windows.UI.Xaml.Shapes; // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 namespace Win2DDemo { /// <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(); } CanvasBitmap bitmap; void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args) { //CanvasBitmap bitmap =await CanvasBitmap.LoadAsync(sender, @"AssetsLockScreenLogo.scale-200.png"); //实例化阴影特效 ShadowEffect shadowEffect = new ShadowEffect { Source = bitmap, BlurAmount = 60.0f, ShadowColor = Colors.Black, }; //实例化变换特效 Transform2DEffect transform2DEffect = new Transform2DEffect { Source = shadowEffect, TransformMatrix = Matrix3x2.CreateTranslation(new Vector2(10, 10)), }; //实例化透明特效 OpacityEffect opacityEffect = new OpacityEffect { Source = transform2DEffect, Opacity = 0.82f, }; //实例化结合特效 CompositeEffect effect2 = new CompositeEffect { Sources ={ opacityEffect , bitmap, } }; args.DrawingSession.DrawImage(effect2, new Vector2(111,111)); //CanvasCommandList cl = new CanvasCommandList(sender); //using (CanvasDrawingSession clds = cl.CreateDrawingSession()) //{ // clds.FillRectangle(new Rect(100, 100, 100, 100), Colors.White); // clds.DrawImage(bitmap, new Rect(10, 10, 100, 100)); //} //ShadowEffect effect = new ShadowEffect() //{ // Source = cl, // BlurAmount = 0.5f, // //ShadowColor = Colors.Black, //}; //args.DrawingSession.DrawImage(effect); } private void Page_Unloaded(object sender, RoutedEventArgs e) { //Microsoft.Toolkit.Uwp.UI.Controls.DropShadowPanel if (this.canvasControl != null) { this.canvasControl.RemoveFromVisualTree(); this.canvasControl = null; } } private void CanvasControl_CreateResources(CanvasControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args) { Task task = this.CreateResourcesAsync(sender); IAsyncAction action = task.AsAsyncAction(); args.TrackAsyncAction(action); } private async Task CreateResourcesAsync(CanvasControl sender) { bitmap = await CanvasBitmap.LoadAsync(sender, "Assets/1.png"); } } }
另外Microsoft.Toolkit.Uwp.UI.Controls 里 的 DropShadowPanel 也行,但是不好用感觉。