Уже есть проблема, созданная в 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
}
}
}
}