использование отображения эффекта тени рамки в случае IOS, но не в случае проекта UWP в xamarin - PullRequest
0 голосов
/ 15 января 2020
<Frame>  
       <Label Text="Hello Forms."></Label> 
</Frame>  

Я использовал рамку для отображения тени, но она не отображается на кроссплатформенной платформе в случае проекта UWP

1 Ответ

0 голосов
/ 16 января 2020

Уже есть проблема, созданная в Github по поводу этой проблемы: Нет теней для рамок UWP?

Ответ там сказал:

Хм, хотя обновление границы запускается свойством HasShadow, кажется, что оно не применяет тени. Похоже, что это никогда не было реализовано.

Команда Xamarin заметила эту проблему и будет работать над ней в будущем.

Также есть пример проекта, в котором использует DropDhadowPanel в UWP, чтобы получить эффект тени для элемента управления. Вы можете взглянуть на этот поток и попробовать его.

Код пользовательского средства визуализации в UWP:

[assembly: ExportRenderer(typeof(ShadowLabel), typeof(ShadowLabelRenderer))]
namespace EffectsDemo.UWP
{
    class ShadowLabelRenderer : ViewRenderer<ShadowLabel, DropShadowPanel>
    {
        protected override void OnElementChanged(ElementChangedEventArgs<ShadowLabel> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                // Instantiate the native control and assign it to the Control property with
                // the SetNativeControl method
                var effect = (ShadowEffect)Element.Effects.FirstOrDefault(x => x is ShadowEffect);

                DropShadowPanel dsPanel = new DropShadowPanel();
                dsPanel.Content = new TextBlock() { Text = Element.Text };

                dsPanel.BlurRadius = effect.Radius;
                Windows.UI.Color color = Windows.UI.Color.FromArgb(
                    Convert.ToByte(effect.Color.A * 255),
                    Convert.ToByte(effect.Color.R * 255),
                    Convert.ToByte(effect.Color.G * 255),
                    Convert.ToByte(effect.Color.B * 255));
                dsPanel.Color = color;
                dsPanel.OffsetX = effect.DistanceX;
                dsPanel.OffsetY = effect.DistanceY;

                SetNativeControl(dsPanel);
            }

            if (e.OldElement != null)
            {
                // Unsubscribe from event handlers and cleanup any resources
            }

            if (e.NewElement != null)
            {
                // Configure the control and subscribe to event handlers
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...