UWP Composition API: Abgerundete Ecken?
Nov 19 2020
Ich habe Mühe herauszufinden, wie ich mithilfe der Kompositions-API abgerundete Ecken von Inhalten erstellen kann. Hier bin ich, jede Hilfe wäre sehr dankbar:
void CreateRoundedCorners(Vector2 cornerRadius, CompositionSurfaceBrush imageSourceBrush, SpriteVisual targetVisual)
{
CompositionRoundedRectangleGeometry roundedRectangle = _compositor.CreateRoundedRectangleGeometry();
roundedRectangle.Size = new Vector2(;
roundedRectangle.CornerRadius = cornerRadius;
CompositionSpriteShape spriteShape = _compositor.CreateSpriteShape(roundedRectangle);
spriteShape.FillBrush = _compositor.CreateColorBrush(Colors.Black);
spriteShape.CenterPoint = new Vector2(_imageSize.X / 2, _imageSize.Y / 2);
ShapeVisual spriteShapeVisual = _compositor.CreateShapeVisual();
spriteShapeVisual.Size = _imageSize;
spriteShapeVisual.Shapes.Add(spriteShape);
CompositionMaskBrush maskBrush = _compositor.CreateMaskBrush();
maskBrush.Source = imageSourceBrush;
maskBrush.Mask = null; // How do I get the rectangle shape in here?
targetVisual.Brush = maskBrush;
}
Antworten
1 SeanO'Neil Nov 19 2020 at 13:24
Ich habe eine Lösung gefunden. Erstellen einer CompositionVisualSurface, Hinzufügen der ShapeVisual und Erstellen einer CompositionSurfaceBrush daraus als Maskenquelle.
void CreateRoundedCorners(Vector2 cornerRadius, CompositionBrush imageSourceBrush, SpriteVisual targetVisual)
{
CompositionRoundedRectangleGeometry roundedRectangle =_compositor.CreateRoundedRectangleGeometry();
roundedRectangle.Size = _imageSize;
roundedRectangle.CornerRadius = cornerRadius;
CompositionSpriteShape spriteShape = _compositor.CreateSpriteShape(roundedRectangle);
spriteShape.FillBrush = _compositor.CreateColorBrush(Colors.Black);
spriteShape.CenterPoint = new Vector2(_imageSize.X / 2, _imageSize.Y / 2);
ShapeVisual spriteShapeVisual = _compositor.CreateShapeVisual();
spriteShapeVisual.BorderMode = CompositionBorderMode.Soft;
spriteShapeVisual.Size = _imageSize;
spriteShapeVisual.Shapes.Add(spriteShape);
CompositionVisualSurface surface = _compositor.CreateVisualSurface();
surface.SourceSize = _imageSize;
surface.SourceVisual = spriteShapeVisual;
CompositionMaskBrush maskBrush = _compositor.CreateMaskBrush();
maskBrush.Source = imageSourceBrush;
maskBrush.Mask = _compositor.CreateSurfaceBrush(surface);
targetVisual.Brush = maskBrush;
}
BEARBEITEN: Eine Maske kann auch aus einer Form erhalten werden, jedoch nur, wenn sie sich bereits im visuellen Baum befindet:
Windows.UI.Xaml.Shapes.Shape rect = new Rectangle();
CompositionBrush mask = rect.GetAlphaMask();
NicoZhu-MSFT Nov 19 2020 at 12:45
UWP Composition API: Abgerundete Ecken?
Für Ihre Anforderung können Sie die SetElementChildVisualMethode verwenden, um die CompositionRoundedRectangleGeometry
zur aktuellen Seite hinzuzufügen .
Zum Beispiel:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var visual = ElementCompositionPreview.GetElementVisual(this);
var compositor = visual.Compositor;
CompositionRoundedRectangleGeometry roundedRectangle = compositor.CreateRoundedRectangleGeometry();
roundedRectangle.Size = new Vector2(200, 200);
roundedRectangle.CornerRadius = new Vector2(30,30);
CompositionSpriteShape spriteShape = compositor.CreateSpriteShape(roundedRectangle);
spriteShape.FillBrush = compositor.CreateColorBrush(Colors.Blue);
spriteShape.CenterPoint = new Vector2(100, 100);
ShapeVisual spriteShapeVisual = compositor.CreateShapeVisual();
spriteShapeVisual.Size = new Vector2(200, 200);
spriteShapeVisual.Shapes.Clear();
spriteShapeVisual.Shapes.Add(spriteShape);
ElementCompositionPreview.SetElementChildVisual(this, spriteShapeVisual);
}