Поместите эффект композиции за контроль

Я применил эффект тени к простому элементу управления TextBlock, но у меня есть проблема : тень находится перед Textblock, и я не знаю, как поместить тень за TextBlock. У вас есть решение этой проблемы ?
Существует код, который создает эффект DropShadow:

public void SetupSimpleTextShadow(TextBlock shadowTarget)
    {
        Visual hostVisual = ElementCompositionPreview.GetElementVisual(shadowTarget);
        Compositor compositor = hostVisual.Compositor;

        DropShadow dropShadow = compositor.CreateDropShadow();
        dropShadow.Color = Color.FromArgb(255, 50, 50, 50);
        dropShadow.BlurRadius = 7f;
        dropShadow.Offset = new Vector3(5f, 5f, 0f);
        dropShadow.Opacity = 0.9f;
        dropShadow.Mask = shadowTarget.GetAlphaMask(); 

        SpriteVisual shadowVisual = compositor.CreateSpriteVisual();
        shadowVisual.Shadow = dropShadow;

        ElementCompositionPreview.SetElementChildVisual(shadowTarget, shadowVisual);

        ExpressionAnimation bindSizeAnimation = compositor.CreateExpressionAnimation("hostVisual.Size");
        bindSizeAnimation.SetReferenceParameter("hostVisual", hostVisual);

        shadowVisual.StartAnimation("Size", bindSizeAnimation);
    }

1 ответ

  1. Попробуйте использовать XPShadow.Пример ссылки https://github.com/brookshi/XPShadow .

    Найти XPShadow в Nuget и скачать его.

    Запись пространства имен ref :

    В коде,который вы хотите, чтобы элемент управления имел тень, вы можете использовать элемент управления в xp: Shadow.

                  <xp:Shadow CornerRadius="2"
                               IsCached="True"
                               Z_Depth="2">
                             <Control/>
                  </xp:Shadow>