Существует ли не Win2D текстовое решение для UWP Composition API

Столбцы Combobox пронумерованы из (0), поэтому вам нужно указать столбец 1;

Private Sub ProjectID_Change() 
    Me.Client_Name.Value = Me.ProjectID.Column(1) 
End Sub

И как предполагается, переместите его в событие AfterUpdate.

2
задан Sean O'Neil 19 January 2019 в 18:43
поделиться

1 ответ

Y-answer: Нет, вы можете рисовать текст только на CompositionDrawingSurface, используя Win2d CanvasDrawingSession. Но вы можете получить Visual из XAML TextBlock с помощью ElementCompositionPreview.GetElementVisual(yourTextBlock) и анимировать его с помощью выражений API композиции + цветных раскадровок XAML.

X-answer: Вы можете создать альфа-маску из своего текста CompositionDrawingSurface и применить ее к CompositionColorBrush:

    private void CreateColoredText(string text)
    {
        var compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
        var graphicsDevice = CanvasComposition.CreateCompositionGraphicsDevice(compositor, CanvasDevice.GetSharedDevice());

        var spriteTextVisual = compositor.CreateSpriteVisual();
        spriteTextVisual.Size = new Vector2(512, 512);

        var maskDrawingSurface = graphicsDevice.CreateDrawingSurface(new Size(512, 512), DirectXPixelFormat.B8G8R8A8UIntNormalized, DirectXAlphaMode.Premultiplied);

        using (var ds = CanvasComposition.CreateDrawingSession(maskDrawingSurface))
        {
            ds.Clear(Colors.Transparent);
            ds.DrawText(text, new Rect(0, 0, 512, 512), Colors.Lime, new CanvasTextFormat
            {
                FontSize = 32,
                FontWeight = FontWeights.Bold,
                VerticalAlignment = CanvasVerticalAlignment.Center,
                HorizontalAlignment = CanvasHorizontalAlignment.Center,
                LineSpacing = 32
            });
        }

        var maskSurfaceBrush = compositor.CreateSurfaceBrush(maskDrawingSurface);
        var surfaceTextBrush = compositor.CreateColorBrush(Colors.DeepPink);
        var maskBrush = compositor.CreateMaskBrush();
        maskBrush.Mask = maskSurfaceBrush;
        maskBrush.Source = surfaceTextBrush;

        var colorAnimation = compositor.CreateColorKeyFrameAnimation();
        colorAnimation.InsertKeyFrame(0.5f, Colors.DeepSkyBlue);
        colorAnimation.InsertKeyFrame(1, Colors.DeepPink);
        colorAnimation.Duration = TimeSpan.FromMilliseconds(1500);
        colorAnimation.IterationBehavior = AnimationIterationBehavior.Forever;

        surfaceTextBrush.StartAnimation("Color", colorAnimation);

        spriteTextVisual.Brush = maskBrush;

        ElementCompositionPreview.SetElementChildVisual(Grid, spriteTextVisual);
    }

Теперь вы можете анимировать цвет и перспективу для своих целей.

0
ответ дан Jet Chopper 19 January 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: