Kompositionspinsel

Alles, was von einer UWP-Anwendung auf dem Bildschirm angezeigt wird, ist sichtbar, da es von einem Pinsel gezeichnet wurde. Mit Pinsel können Sie Benutzeroberflächenobjekte mit Inhalten zeichnen, die von einfachen Volltonfarben über Bilder oder Zeichnungen bis hin zu komplexen Effektketten reichen. In diesem Thema werden die Konzepte des Malens mit CompositionBrush vorgestellt.

Hinweis: Bei der Arbeit mit der XAML-UWP-App können Sie ein UIElement mit einem XAML-Pinsel oder einem CompositionBrush malen. In der Regel ist es einfacher und ratsam, einen XAML-Pinsel auszuwählen, wenn Ihr Szenario von einem XAML-Pinsel unterstützt wird. Beispiel: Animieren der Farbe einer Schaltfläche, Ändern der Füllung eines Texts oder einer Form mit einem Bild. Wenn Sie dagegen versuchen, etwas zu tun, das von einem XAML-Pinsel nicht unterstützt wird, z. B. das Malen mit einer animierten Maske, einer animierten Neun-Raster-Stretch oder einer Effektkette, können Sie einen CompositionBrush verwenden, um ein UIElement mithilfe von XamlCompositionBrushBase zu zeichnen.

Wenn Sie mit der Visual-Ebene arbeiten, muss ein CompositionBrush verwendet werden, um den Bereich eines SpriteVisual zu zeichnen.

Voraussetzungen

In dieser Übersicht wird davon ausgegangen, dass Sie mit der Struktur einer einfachen Kompositionsanwendung vertraut sind, wie in der Übersicht über die visuelle Ebene beschrieben.

Zeichnen mit einem CompositionBrush

Ein CompositionBrush "zeichnet" einen Bereich mit seiner Ausgabe. Verschiedene Pinsel haben unterschiedliche Ausgabetypen. Einige Pinsel zeichnen einen Bereich mit einer Volltonfarbe, andere mit einem Farbverlauf, einem Bild, einer benutzerdefinierten Zeichnung oder einem Effekt. Es gibt auch spezielle Pinsel, die das Verhalten anderer Pinsel ändern. Beispielsweise kann die Deckkraftmaske verwendet werden, um zu steuern, welcher Bereich von einem CompositionBrush gezeichnet wird, oder ein Neunraster kann verwendet werden, um die Dehnung zu steuern, die beim Zeichnen eines Bereichs auf einen CompositionBrush angewendet wird. CompositionBrush kann einen der folgenden Typen aufweisen:

Klasse Details Eingeführt in
CompositionColorBrush Zeichnet einen Bereich mit einer Volltonfarbe Windows 10, Version 1511 (SDK 10586)
CompositionSurfaceBrush Zeichnet einen Bereich mit dem Inhalt einer ICompositionSurface Windows 10, Version 1511 (SDK 10586)
CompositionEffectBrush Zeichnet einen Bereich mit dem Inhalt eines Kompositionseffekts Windows 10, Version 1511 (SDK 10586)
CompositionMaskBrush Zeichnet ein Visual mit einem CompositionBrush mit einer Deckkraftmaske Windows 10, Version 1607 (SDK 14393)
CompositionNineGridBrush Zeichnet einen Bereich mit einem CompositionBrush mithilfe einer NineGrid-Stretch Windows 10, Version 1607 (SDK 14393)
CompositionLinearGradientBrush Zeichnet einen Bereich mit einem linearen Farbverlauf Windows 10, Version 1709 (SDK 16299)
CompositionRadialGradientBrush Zeichnet einen Bereich mit einem radialen Farbverlauf Windows 10, Version 1903 (Insider Preview SDK)
CompositionBackdropBrush Zeichnet einen Bereich, indem Hintergrundpixel aus der Anwendung oder pixeln direkt hinter dem Fenster der Anwendung auf dem Desktop erfasst werden. Wird als Eingabe für einen anderen CompositionBrush wie ein CompositionEffectBrush verwendet. Windows 10, Version 1607 (SDK 14393)

Malen mit Volltonfarbe

Ein CompositionColorBrush zeichnet einen Bereich mit einer Volltonfarbe. Es gibt eine Vielzahl von Möglichkeiten, die Farbe eines SolidColorBrush anzugeben. Beispielsweise können Sie die Alpha-, Rot-, Blau- und Grünkanäle (ARGB) angeben oder eine der vordefinierten Farben verwenden, die von der Colors-Klasse bereitgestellt werden.

Die Abbildung und der Code zeigen im Folgenden eine kleine visuelle Struktur. Es wird ein Rechteck erstellt, dessen Konturen mit einem schwarzen Pinsel gezeichnet sind und das mit einem Pinsel in Volltonfarbe ausgefüllt ist, die den Farbwert „0x9ACD32“ hat.

CompositionColorBrush

Compositor _compositor;
ContainerVisual _container;
SpriteVisual _colorVisual1, _colorVisual2;
CompositionColorBrush _blackBrush, _greenBrush;

_compositor = Window.Current.Compositor;
_container = _compositor.CreateContainerVisual();

_blackBrush = _compositor.CreateColorBrush(Colors.Black);
_colorVisual1= _compositor.CreateSpriteVisual();
_colorVisual1.Brush = _blackBrush;
_colorVisual1.Size = new Vector2(156, 156);
_colorVisual1.Offset = new Vector3(0, 0, 0);
_container.Children.InsertAtBottom(_colorVisual1);

_ greenBrush = _compositor.CreateColorBrush(Color.FromArgb(0xff, 0x9A, 0xCD, 0x32));
_colorVisual2 = _compositor.CreateSpriteVisual();
_colorVisual2.Brush = _greenBrush;
_colorVisual2.Size = new Vector2(150, 150);
_colorVisual2.Offset = new Vector3(3, 3, 0);
_container.Children.InsertAtBottom(_colorVisual2);

Zeichnen mit einem linearen Farbverlauf

Ein CompositionLinearGradientBrush zeichnet einen Bereich mit einem linearen Farbverlauf. Ein linearer Farbverlauf blendet zwei oder mehr Farben über eine Linie hinweg, die Farbverlaufsachse. Sie verwenden GradientStop-Objekte, um die Farben im Farbverlauf und deren Positionen anzugeben.

Die folgende Abbildung und der Code zeigen einen SpriteVisual, der mit einem LinearGradientBrush mit 2 Stopps in roter und gelber Farbe gezeichnet wurde.

CompositionLinearGradientBrush

Compositor _compositor;
SpriteVisual _gradientVisual;
CompositionLinearGradientBrush _redyellowBrush;

_compositor = Window.Current.Compositor;

_redyellowBrush = _compositor.CreateLinearGradientBrush();
_redyellowBrush.ColorStops.Add(_compositor.CreateColorGradientStop(0, Colors.Red));
_redyellowBrush.ColorStops.Add(_compositor.CreateColorGradientStop(1, Colors.Yellow));
_gradientVisual = _compositor.CreateSpriteVisual();
_gradientVisual.Brush = _redyellowBrush;
_gradientVisual.Size = new Vector2(156, 156);

Paint mit radialem Farbverlauf

Ein CompositionRadialGradientBrush zeichnet einen Bereich mit einem radialen Farbverlauf. Ein radialer Farbverlauf mischt zwei oder mehr Farben mit dem Farbverlauf ab der Mitte der Ellipse und endet am Radius der Ellipse. GradientStop-Objekte werden verwendet, um die Farben und deren Position im Farbverlauf zu definieren.

Die folgende Abbildung und der Code zeigen einen SpriteVisual, der mit einem RadialGradientBrush mit 2 GradientStops gezeichnet wurde.

CompositionRadialGradientBrush

Compositor _compositor;
SpriteVisual _gradientVisual;
CompositionRadialGradientBrush RGBrush;

_compositor = Window.Current.Compositor;

RGBrush = _compositor.CreateRadialGradientBrush();
RGBrush.ColorStops.Add(_compositor.CreateColorGradientStop(0, Colors.Aquamarine));
RGBrush.ColorStops.Add(_compositor.CreateColorGradientStop(1, Colors.DeepPink));
_gradientVisual = _compositor.CreateSpriteVisual();
_gradientVisual.Brush = RGBrush;
_gradientVisual.Size = new Vector2(200, 200);

Malen mit einem Bild

Ein CompositionSurfaceBrush zeichnet einen Bereich mit Pixeln, die auf eine ICompositionSurface gerendert werden. Beispielsweise kann ein CompositionSurfaceBrush verwendet werden, um einen Bereich mit einem Bild zu zeichnen, das mithilfe der LoadedImageSurface-API auf einer ICompositionSurface-Oberfläche gerendert wird.

Die folgende Abbildung und der Code zeigen einen SpriteVisual, der mit einer Bitmap einer Lakritze gezeichnet wurde, die mithilfe von LoadedImageSurface auf eine ICompositionSurface gerendert wurde. Die Eigenschaften von CompositionSurfaceBrush können verwendet werden, um die Bitmap innerhalb der Grenzen des Visuals zu strecken und auszurichten.

CompositionSurfaceBrush

Compositor _compositor;
SpriteVisual _imageVisual;
CompositionSurfaceBrush _imageBrush;

_compositor = Window.Current.Compositor;

_imageBrush = _compositor.CreateSurfaceBrush();

// The loadedSurface has a size of 0x0 till the image has been been downloaded, decoded and loaded to the surface. We can assign the surface to the CompositionSurfaceBrush and it will show up once the image is loaded to the surface.
LoadedImageSurface _loadedSurface = LoadedImageSurface.StartLoadFromUri(new Uri("ms-appx:///Assets/licorice.jpg"));
_imageBrush.Surface = _loadedSurface;

_imageVisual = _compositor.CreateSpriteVisual();
_imageVisual.Brush = _imageBrush;
_imageVisual.Size = new Vector2(156, 156);

Zeichnen mit einer benutzerdefinierten Zeichnung

Ein CompositionSurfaceBrush kann auch verwendet werden, um einen Bereich mit Pixeln aus einer ICompositionSurface zu zeichnen, die mit Win2D (oder D2D) gerendert wurde.

Der folgende Code zeigt eine SpriteVisual-Gezeichnete mit einer Textausführung, die mithilfe von Win2D auf eine ICompositionSurface gerendert wird. Hinweis: Um Win2D verwenden zu können, müssen Sie das Win2D-NuGet-Paket in Ihr Projekt einschließen.

Compositor _compositor;
CanvasDevice _device;
CompositionGraphicsDevice _compositionGraphicsDevice;
SpriteVisual _drawingVisual;
CompositionSurfaceBrush _drawingBrush;

_device = CanvasDevice.GetSharedDevice();
_compositionGraphicsDevice = CanvasComposition.CreateCompositionGraphicsDevice(_compositor, _device);

_drawingBrush = _compositor.CreateSurfaceBrush();
CompositionDrawingSurface _drawingSurface = _compositionGraphicsDevice.CreateDrawingSurface(new Size(256, 256), DirectXPixelFormat.B8G8R8A8UIntNormalized, DirectXAlphaMode.Premultiplied);

using (var ds = CanvasComposition.CreateDrawingSession(_drawingSurface))
{
     ds.Clear(Colors.Transparent);
     var rect = new Rect(new Point(2, 2), (_drawingSurface.Size.ToVector2() - new Vector2(4, 4)).ToSize());
     ds.FillRoundedRectangle(rect, 15, 15, Colors.LightBlue);
     ds.DrawRoundedRectangle(rect, 15, 15, Colors.Gray, 2);
     ds.DrawText("This is a composition drawing surface", rect, Colors.Black, new CanvasTextFormat()
     {
          FontFamily = "Comic Sans MS",
          FontSize = 32,
          WordWrapping = CanvasWordWrapping.WholeWord,
          VerticalAlignment = CanvasVerticalAlignment.Center,
          HorizontalAlignment = CanvasHorizontalAlignment.Center
     }
);

_drawingBrush.Surface = _drawingSurface;

_drawingVisual = _compositor.CreateSpriteVisual();
_drawingVisual.Brush = _drawingBrush;
_drawingVisual.Size = new Vector2(156, 156);

Ebenso kann compositionSurfaceBrush auch verwendet werden, um ein SpriteVisual mit einer SwapChain mithilfe von Win2D-Interop zu zeichnen. Dieses Beispiel enthält ein Beispiel für die Verwendung von Win2D zum Zeichnen eines SpriteVisual mit einer Swapchain.

Zeichnen mit einem Video

Ein CompositionSurfaceBrush kann auch verwendet werden, um einen Bereich mit Pixeln aus einem ICompositionSurface zu zeichnen, das mithilfe eines Videos gerendert wird, das über die MediaPlayer-Klasse geladen wird.

Der folgende Code zeigt ein SpriteVisual, das mit einem Video gezeichnet wurde, das in eine ICompositionSurface geladen wurde.

Compositor _compositor;
SpriteVisual _videoVisual;
CompositionSurfaceBrush _videoBrush;

// MediaPlayer set up with a create from URI

_mediaPlayer = new MediaPlayer();

// Get a source from a URI. This could also be from a file via a picker or a stream
var source = MediaSource.CreateFromUri(new Uri("https://go.microsoft.com/fwlink/?LinkID=809007&clcid=0x409"));
var item = new MediaPlaybackItem(source);
_mediaPlayer.Source = item;
_mediaPlayer.IsLoopingEnabled = true;

// Get the surface from MediaPlayer and put it on a brush
_videoSurface = _mediaPlayer.GetSurface(_compositor);
_videoBrush = _compositor.CreateSurfaceBrush(_videoSurface.CompositionSurface);

_videoVisual = _compositor.CreateSpriteVisual();
_videoVisual.Brush = _videoBrush;
_videoVisual.Size = new Vector2(156, 156);

Paint mit einem Filtereffekt

Ein CompositionEffectBrush zeichnet einen Bereich mit ausgabe eines CompositionEffect. Effekte in der visuellen Ebene können als abstellbare Filtereffekte betrachtet werden, die auf eine Sammlung von Quellinhalten angewendet werden, z. B. Farben, Farbverläufe, Bilder, Videos, Swapchains, Regionen Ihrer Benutzeroberfläche oder Strukturen von Visuals. Der Quellinhalt wird in der Regel mit einem anderen CompositionBrush angegeben.

Die folgende Abbildung und der folgende Code zeigen ein SpriteVisual, das mit einem Bild einer Katze gezeichnet wurde, die den Entsättigungsfiltereffekt angewendet hat.

CompositionEffectBrush

Compositor _compositor;
SpriteVisual _effectVisual;
CompositionEffectBrush _effectBrush;

_compositor = Window.Current.Compositor;

var graphicsEffect = new SaturationEffect {
                              Saturation = 0.0f,
                              Source = new CompositionEffectSourceParameter("mySource")
                         };

var effectFactory = _compositor.CreateEffectFactory(graphicsEffect);
_effectBrush = effectFactory.CreateBrush();

CompositionSurfaceBrush surfaceBrush =_compositor.CreateSurfaceBrush();
LoadedImageSurface loadedSurface = LoadedImageSurface.StartLoadFromUri(new Uri("ms-appx:///Assets/cat.jpg"));
SurfaceBrush.surface = loadedSurface;

_effectBrush.SetSourceParameter("mySource", surfaceBrush);

_effectVisual = _compositor.CreateSpriteVisual();
_effectVisual.Brush = _effectBrush;
_effectVisual.Size = new Vector2(156, 156);

Weitere Informationen zum Erstellen eines Effekts mit CompositionBrushes finden Sie unter Effekte in visueller Ebene.

Paint with a CompositionBrush with opacity mask applied

Ein CompositionMaskBrush zeichnet einen Bereich mit einem CompositionBrush mit einer Deckkraftmaske, die darauf angewendet wird. Die Quelle der Deckkraftmaske kann ein beliebiger CompositionBrush vom Typ CompositionColorBrush, CompositionLinearGradientBrush, CompositionSurfaceBrush, CompositionEffectBrush oder CompositionNineGridBrush sein. Die Deckkraftmaske muss als CompositionSurfaceBrush angegeben werden.

In der folgenden Abbildung und im Code wird ein SpriteVisual mit einem CompositionMaskBrush-Element dargestellt. Die Quelle der Maske ist eine CompositionLinearGradientBrush, die maskiert ist, um wie ein Kreis auszusehen, indem ein Bild des Kreises als Maske verwendet wird.

CompositionMaskBrush

Compositor _compositor;
SpriteVisual _maskVisual;
CompositionMaskBrush _maskBrush;

_compositor = Window.Current.Compositor;

_maskBrush = _compositor.CreateMaskBrush();

CompositionLinearGradientBrush _sourceGradient = _compositor.CreateLinearGradientBrush();
_sourceGradient.ColorStops.Add(_compositor.CreateColorGradientStop(0,Colors.Red));
_sourceGradient.ColorStops.Add(_compositor.CreateColorGradientStop(1,Colors.Yellow));
_maskBrush.Source = _sourceGradient;

LoadedImageSurface loadedSurface = LoadedImageSurface.StartLoadFromUri(new Uri("ms-appx:///Assets/circle.png"), new Size(156.0, 156.0));
_maskBrush.Mask = _compositor.CreateSurfaceBrush(loadedSurface);

_maskVisual = _compositor.CreateSpriteVisual();
_maskVisual.Brush = _maskBrush;
_maskVisual.Size = new Vector2(156, 156);

Malen mit einem CompositionBrush mit NineGrid Stretch

Ein CompositionNineGridBrush zeichnet einen Bereich mit einem CompositionBrush, der mithilfe der Metapher mit neun Rastern gestreckt wird. Die Metapher mit neun Rastern ermöglicht es Ihnen, Kanten und Ecken eines CompositionBrush anders als seine Mitte zu strecken. Die Quelle der Neun-Raster-Dehnung kann von jedem CompositionBrush vom Typ CompositionColorBrush, CompositionSurfaceBrush oder CompositionEffectBrush verwendet werden.

Der folgende Code zeigt ein SpriteVisual, das mit einem CompositionNineGridBrush gezeichnet wurde. Die Quelle der Maske ist eine CompositionSurfaceBrush, die mithilfe eines Nine-Rasters gestreckt wird.

Compositor _compositor;
SpriteVisual _nineGridVisual;
CompositionNineGridBrush _nineGridBrush;

_compositor = Window.Current.Compositor;

_ninegridBrush = _compositor.CreateNineGridBrush();

// nineGridImage.png is 50x50 pixels; nine-grid insets, as measured relative to the actual size of the image, are: left = 1, top = 5, right = 10, bottom = 20 (in pixels)

LoadedImageSurface _imageSurface = LoadedImageSurface.StartLoadFromUri(new Uri("ms-appx:///Assets/nineGridImage.png"));
_nineGridBrush.Source = _compositor.CreateSurfaceBrush(_imageSurface);

// set Nine-Grid Insets

_ninegridBrush.SetInsets(1, 5, 10, 20);

// set appropriate Stretch on SurfaceBrush for Center of Nine-Grid

sourceBrush.Stretch = CompositionStretch.Fill;

_nineGridVisual = _compositor.CreateSpriteVisual();
_nineGridVisual.Brush = _ninegridBrush;
_nineGridVisual.Size = new Vector2(100, 75);

Malen mit Hintergrundpixeln

Ein CompositionBackdropBrush zeichnet einen Bereich mit dem Inhalt hinter dem Bereich. Ein CompositionBackdropBrush wird nie allein verwendet, sondern wird stattdessen wie ein EffectBrush als Eingabe für eine andere CompositionBrush verwendet. Wenn Sie beispielsweise einen CompositionBackdropBrush als Eingabe für einen Blur-Effekt verwenden, können Sie einen Mattglaseffekt erzielen.

Der folgende Code zeigt eine kleine visuelle Struktur zum Erstellen eines Bilds mithilfe von CompositionSurfaceBrush und einer Überlagerung aus mattiertem Glas über dem Bild. Die Überlagerung aus mattiertem Glas wird erstellt, indem ein SpriteVisual mit einem EffectBrush-Element über dem Bild platziert wird. EffectBrush verwendet einen CompositionBackdropBrush als Eingabe für den Weichzeichnereffekt.

Compositor _compositor;
SpriteVisual _containerVisual;
SpriteVisual _imageVisual;
SpriteVisual _backdropVisual;

_compositor = Window.Current.Compositor;

// Create container visual to host the visual tree
_containerVisual = _compositor.CreateContainerVisual();

// Create _imageVisual and add it to the bottom of the container visual.
// Paint the visual with an image.

CompositionSurfaceBrush _licoriceBrush = _compositor.CreateSurfaceBrush();

LoadedImageSurface loadedSurface = 
    LoadedImageSurface.StartLoadFromUri(new Uri("ms-appx:///Assets/licorice.jpg"));
_licoriceBrush.Surface = loadedSurface;

_imageVisual = _compositor.CreateSpriteVisual();
_imageVisual.Brush = _licoriceBrush;
_imageVisual.Size = new Vector2(156, 156);
_imageVisual.Offset = new Vector3(0, 0, 0);
_containerVisual.Children.InsertAtBottom(_imageVisual)

// Create a SpriteVisual and add it to the top of the containerVisual.
// Paint the visual with an EffectBrush that applies blur to the content
// underneath the Visual to create a frosted glass effect.

GaussianBlurEffect blurEffect = new GaussianBlurEffect(){
                                    Name = "Blur",
                                    BlurAmount = 1.0f,
                                    BorderMode = EffectBorderMode.Hard,
                                    Source = new CompositionEffectSourceParameter("source");
                                    };

CompositionEffectFactory blurEffectFactory = _compositor.CreateEffectFactory(blurEffect);
CompositionEffectBrush _backdropBrush = blurEffectFactory.CreateBrush();

// Create a BackdropBrush and bind it to the EffectSourceParameter source

_backdropBrush.SetSourceParameter("source", _compositor.CreateBackdropBrush());
_backdropVisual = _compositor.CreateSpriteVisual();
_backdropVisual.Brush = _licoriceBrush;
_backdropVisual.Size = new Vector2(78, 78);
_backdropVisual.Offset = new Vector3(39, 39, 0);
_containerVisual.Children.InsertAtTop(_backdropVisual);

Kombinieren von CompositionBrushes

Eine Reihe von CompositionBrushes verwendet andere CompositionBrushes als Eingaben. Beispielsweise kann mithilfe der SetSourceParameter-Methode ein anderes CompositionBrush als Eingabe auf eine CompositionEffectBrush festgelegt werden. In der folgenden Tabelle werden die unterstützten Kombinationen von CompositionBrushes beschrieben. Beachten Sie, dass die Verwendung einer nicht unterstützten Kombination eine Ausnahme auslöst.

Brush EffectBrush.SetSourceParameter() MaskBrush.Mask MaskBrush.Source NineGridBrush.Source
CompositionColorBrush YES YES YES YES
CompositionLinear
Gradientbrush
YES YES YES Nein
CompositionSurfaceBrush YES YES YES YES
CompositionEffectBrush Nein Nein YES Nein
CompositionMaskBrush Nein Nein Nein Nein
CompositionNineGridBrush YES YES YES Nein
CompositionBackdropBrush YES Nein Nein Nein

Verwenden eines XAML-Pinsels im Vergleich zu CompositionBrush

Die folgende Tabelle enthält eine Liste von Szenarien und ob die Verwendung des XAML- oder Kompositionspinsels beim Malen eines UIElement oder eines SpriteVisual in Ihrer Anwendung vorgeschrieben ist.

Hinweis

Wenn ein CompositionBrush für ein XAML UIElement vorgeschlagen wird, wird davon ausgegangen, dass CompositionBrush mithilfe einer XamlCompositionBrushBase gepackt wird.

Szenario XAML UIElement Composition SpriteVisual
Malen eines Bereichs mit Volltonfarbe SolidColorBrush CompositionColorBrush
Malen eines Bereichs mit animierter Farbe SolidColorBrush CompositionColorBrush
Zeichnen eines Bereichs mit einem statischen Farbverlauf LinearGradientBrush CompositionLinearGradientBrush
Zeichnen eines Bereichs mit animierten Farbverlaufsstopps CompositionLinearGradientBrush CompositionLinearGradientBrush
Zeichnen eines Bereichs mit einem Bild ImageBrush CompositionSurfaceBrush
Malen eines Bereichs mit einer Webseite WebViewBrush
Zeichnen eines Bereichs mit einem Bild mit NineGrid Stretch Bildsteuerung CompositionNineGridBrush
Malen eines Bereichs mit animiertem NineGrid-Stretch CompositionNineGridBrush CompositionNineGridBrush
Malen eines Bereichs mit einer Swapchain SwapChainPanel CompositionSurfaceBrush mit Swapchain-Interop
Zeichnen eines Bereichs mit einem Video MediaElement CompositionSurfaceBrush mit Medieninterop
Malen eines Bereichs mit benutzerdefinierter 2D-Zeichnung CanvasControl von Win2D CompositionSurfaceBrush mit Win2D-Interop
Malen eines Bereichs mit nicht animierter Maske Verwenden von XAML-Shapes zum Definieren einer Maske CompositionMaskBrush
Malen eines Bereichs mit einer animierten Maske CompositionMaskBrush CompositionMaskBrush
Malen eines Bereichs mit einem animierten Filtereffekt CompositionEffectBrush CompositionEffectBrush
Malen eines Bereichs mit einem Effekt, der auf Hintergrundpixel angewendet wird CompositionBackdropBrush CompositionBackdropBrush

Komposition native DirectX- und Direct2D-Interop mit BeginDraw und EndDraw

XAML-Pinselinterop mit XamlCompositionBrushBase