Xamarin.Forms
Auswirkungen
Suche…
Einführung
Effekte vereinfachen plattformspezifische Anpassungen. Wenn die Eigenschaften eines Xamarin Forms-Steuerelements geändert werden müssen, können Effekte verwendet werden. Wenn die Methoden des Xamarin Forms Control überschrieben werden müssen, können benutzerdefinierte Renderer verwendet werden
Plattformspezifischen Effekt für ein Entry-Control hinzufügen
- Erstellen Sie eine neue Xamarin Forms App mit PCL-Datei -> Neue Lösung -> Plattformübergreifende App -> Xamarin Forms -> Forms App.
EffectsDemodas Projekt alsEffectsDemo -
OnElementPropertyChangedSie im iOS-Projekt eine neueEffectKlasse hinzu, die von derPlatformEffectKlasse erbt und die MethodenOnAttached,OnDetachedundOnElementPropertyChangedOnDetachedOnElementPropertyChangedSie die beiden AttributeResolutionGroupNameundExportEffect. Diese sind erforderlich, um diesen Effekt aus dem PCL / Shared-Projekt zu verwenden.
OnAttachedist die Methode, bei der die Anpassungslogik verwendet wirdOnDetachedist die Methode, bei der das Bereinigen undOnDetachedder Registrierung erfolgtOnElementPropertyChangedist die Methode, die bei Eigenschaftsänderungen verschiedener Elemente ausgelöst wird. Um die richtige Eigenschaft zu identifizieren, überprüfen Sie die genaue Eigenschaftsänderung und fügen Sie Ihre Logik hinzu. In diesem Beispiel gibtOnFocusdieBlueFarbe undOutofFocusdieRedFarbeusing System; using EffectsDemo.iOS; using UIKit; using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; [assembly: ResolutionGroupName("xhackers")] [assembly: ExportEffect(typeof(FocusEffect), "FocusEffect")] namespace EffectsDemo.iOS { public class FocusEffect : PlatformEffect { public FocusEffect() { } UIColor backgroundColor; protected override void OnAttached() { try { Control.BackgroundColor = backgroundColor = UIColor.Red; } catch (Exception ex) { Console.WriteLine("Cannot set attacked property" + ex.Message); } } protected override void OnDetached() { throw new NotImplementedException(); } protected override void OnElementPropertyChanged(System.ComponentModel.PropertyChangedEventArgs args) { base.OnElementPropertyChanged(args); try { if (args.PropertyName == "IsFocused") { if (Control.BackgroundColor == backgroundColor) { Control.BackgroundColor = UIColor.Blue; } else { Control.BackgroundColor = backgroundColor; } } } catch (Exception ex) { Console.WriteLine("Cannot set property " + ex.Message); } }}}
So verwenden Sie diesen Effekt in der Anwendung: Erstellen Sie im
PCLProjekt eine neue Klasse mit dem NamenFocusEffectdie vonRoutingEffecterbt. Dies ist wichtig, damit die PCL die plattformspezifische Implementierung des Effekts instanziiert. Beispielcode unten:using Xamarin.Forms; namespace EffectsDemo { public class FocusEffect : RoutingEffect { public FocusEffect() : base("xhackers.FocusEffect") { } } }Fügen Sie den Effekt zur
Entryin der XAML hinzu<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:EffectsDemo" x:Class="EffectsDemo.EffectsDemoPage"> <StackLayout Orientation="Horizontal" HorizontalOptions="Center" VerticalOptions="Center"> <Label Text="Effects Demo" HorizontalOptions="StartAndExpand" VerticalOptions="Center" ></Label> <Entry Text="Controlled by effects" HorizontalOptions="FillAndExpand" VerticalOptions="Center"> <Entry.Effects> <local:FocusEffect> </local:FocusEffect> </Entry.Effects> </Entry> </StackLayout> </ContentPage>
Da war der Effekt nur in iOS - Version umgesetzt werden , wenn die Anwendung in läuft iOS Simulator die beim Fokussieren Entry Hintergrundfarbe ändert und nichts passiert in Android Emulator als der Effect nicht unter erstellt wurde Droid Projekt

