Xamarin.Forms
Effecten
Zoeken…
Invoering
Effecten vereenvoudigt platformspecifieke aanpassingen. Wanneer het nodig is om de eigenschappen van een Xamarin Forms Control te wijzigen, kunnen Effecten worden gebruikt. Wanneer het nodig is om de methoden van Xamarin Forms Control te negeren, kunnen aangepaste renderers worden gebruikt
Platformspecifiek effect toevoegen voor een toegangscontrole
- Maak een nieuwe Xamarin Forms-app met PCL-bestand -> Nieuwe oplossing -> Multiplatform-app -> Xamarin Forms -> Forms-app; Noem het project als
EffectsDemo
- Onder de iOS-project, een nieuwe
Effect
klasse die erft vanPlatformEffect
klasse en de prioriteit van de methodenOnAttached
,OnDetached
enOnElementPropertyChanged
Let op de twee attributenResolutionGroupName
enExportEffect
, die nodig zijn voor het consumeren van deze ingang van de PCL / gedeelde project.
OnAttached
is de methode waar de logica voor aanpassing naar binnen gaatOnDetached
is de methode waarbij het opschonen enOnDetached
plaatsvindtOnElementPropertyChanged
is de methode die wordt geactiveerd bij eigenschapsveranderingen van verschillende elementen. Controleer de juiste eigenschapsverandering en voeg uw logica toe om de juiste eigenschap te identificeren. In dit voorbeeld geeftOnFocus
deBlue
kleur en geeftOutofFocus
Red
kleurusing 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); } }
}}
Om dit effect in de toepassing te
FocusEffect
, maakt u onder hetPCL
project een nieuwe klasse met de naamFocusEffect
dieRoutingEffect
vanRoutingEffect
. Dit is essentieel om de PCL de platformspecifieke implementatie van het effect te laten instantiëren. Voorbeeldcode hieronder:using Xamarin.Forms; namespace EffectsDemo { public class FocusEffect : RoutingEffect { public FocusEffect() : base("xhackers.FocusEffect") { } } }
Voeg het effect toe aan
Entry
in de XAML<?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>
Aangezien het effect alleen in iOS-versie is geïmplementeerd, wanneer de app in iOS Simulator
bij het focussen op de achtergrondkleurveranderingen bij Entry
en er gebeurt niets in Android Emulator
omdat het Effect
niet is gemaakt onder het Droid
project