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
Effectklasse die erft vanPlatformEffectklasse en de prioriteit van de methodenOnAttached,OnDetachedenOnElementPropertyChangedLet op de twee attributenResolutionGroupNameenExportEffect, die nodig zijn voor het consumeren van deze ingang van de PCL / gedeelde project.
OnAttachedis de methode waar de logica voor aanpassing naar binnen gaatOnDetachedis de methode waarbij het opschonen enOnDetachedplaatsvindtOnElementPropertyChangedis 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 geeftOnFocusdeBluekleur en geeftOutofFocusRedkleurusing 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 hetPCLproject een nieuwe klasse met de naamFocusEffectdieRoutingEffectvanRoutingEffect. 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
Entryin 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

