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.
EffectsDemo
das Projekt alsEffectsDemo
-
OnElementPropertyChanged
Sie im iOS-Projekt eine neueEffect
Klasse hinzu, die von derPlatformEffect
Klasse erbt und die MethodenOnAttached
,OnDetached
undOnElementPropertyChanged
OnDetached
OnElementPropertyChanged
Sie die beiden AttributeResolutionGroupName
undExportEffect
. Diese sind erforderlich, um diesen Effekt aus dem PCL / Shared-Projekt zu verwenden.
OnAttached
ist die Methode, bei der die Anpassungslogik verwendet wirdOnDetached
ist die Methode, bei der das Bereinigen undOnDetached
der Registrierung erfolgtOnElementPropertyChanged
ist 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 gibtOnFocus
dieBlue
Farbe undOutofFocus
dieRed
Farbeusing 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
PCL
Projekt eine neue Klasse mit dem NamenFocusEffect
die vonRoutingEffect
erbt. 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
Entry
in 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