Ich verwende eine MasterDetailPage, bei der sowohl die Menü- als auch die Inhaltsseite einen weißen Hintergrund haben. Daher muss ich der Inhaltsseite ein Schattentrennzeichen hinzufügen, wenn das Menü angezeigt wird. Wie folgt aus:Xamarin Forms Hinzufügen von Schatten auf der MasterDetailPage-Inhaltsseite
Das einzige Beispiel, das ich finden konnte, ist dies: https://gist.github.com/SeeD-Seifer/120971b4dda7a785a7f4bda928c9dc2b
ich den Code implementiert haben, und die Schatten-Effekt wirkt auf Etiketten, Bilder und andere Elemente. Aber ich kann es nicht auf einer Navigationsseite arbeiten.
Mein Code:
ShadowEffect.cs
public class ShadowEffect : RoutingEffect
{
public float Radius { get; set; }
public Color Color { get; set; }
public float DistanceX { get; set; }
public float DistanceY { get; set; }
public ShadowEffect() : base("MyCompany.PanelShadowEffect")
{
}
}
ShadowNavigationPage.cs
public ShadowNavigationPage(Page root) : base(root)
{
}
protected override void OnAppearing()
{
base.OnAppearing();
Effects.Add(new ShadowEffect()
{
Radius = 0,
DistanceX = -20,
DistanceY = 0,
Color = Color.Black
});
}
PanelShadowEffect
[assembly: ResolutionGroupName("MyCompany")]
[assembly: ExportEffect(typeof(PanelShadowEffect), "PanelShadowEffect")]
namespace MyApp.iOS.Renderer
{
public class PanelShadowEffect : PlatformEffect
{
protected override void OnAttached()
{
try
{
var effect = (ShadowEffect)Element.Effects.FirstOrDefault(e => e is ShadowEffect);
if (effect == null)
{
return;
}
var control = Control;
if (control == null)
{
var renderer = Platform.GetRenderer((VisualElement)Element);
control = renderer.ViewController.View;
}
control.Layer.CornerRadius = effect.Radius;
control.Layer.ShadowColor = effect.Color.ToCGColor();
control.Layer.ShadowOffset = new CGSize(effect.DistanceX, effect.DistanceY);
control.Layer.ShadowOpacity = .5f;
control.Layer.MasksToBounds = false;
// This doesn't work either
//Container.Layer.CornerRadius = effect.Radius;
//Container.Layer.ShadowColor = effect.Color.ToCGColor();
//Container.Layer.ShadowOffset = new CGSize(effect.DistanceX, effect.DistanceY);
//Container.Layer.ShadowOpacity = .5f;
//Container.Layer.MasksToBounds = false;
}
catch (Exception ex)
{
Console.WriteLine("Cannot set property on attached control. Error: {0}", ex.Message);
}
}
protected override void OnDetached()
{
}
}
}
Hm das ist wirklich merkwürdig! Ich habe das gerade versucht und es zeigt immer noch nicht den Schatten .. Ich werde versuchen, heute Abend einen isolierten Test in einem neuen Projekt zu machen und zu sehen, ob ich das Problem in meiner aktuellen App finden kann. Und vielen Dank für Ihre Antwort! Wird in einigen Stunden zurück sein. –
@MortenOC Ich habe ein minimales Beispielprojekt auf meinen GitHub [hier] (https://github.com/HankiDesign/NavigationPageShadowiOS) hochgeladen. Probieren Sie es aus! – hankide
Danke !! Sehr schön, dass du es auch zu Github hinzugefügt hast! Ich kann nicht der Einzige sein, der das braucht! :) Dein Beispiel hat wie ein Zauber funktioniert! Ich muss immer noch herausfinden, warum mein Projekt auf Navigationsseiten nicht gerendert werden kann. –