Xamarin.Forms
Effets
Recherche…
Introduction
Effects simplifie les personnalisations spécifiques à la plateforme. Lorsqu'il est nécessaire de modifier les propriétés d'un Xamarin Forms Control, vous pouvez utiliser Effects. Lorsqu'il est nécessaire de remplacer les méthodes de Xamarin Forms Control, des moteurs de rendu personnalisés peuvent être utilisés
Ajout d'un effet spécifique à la plate-forme pour un contrôle d'entrée
- Créez une nouvelle application Xamarin Forms à l'aide de PCL File -> New Solution -> Multiplatform App -> Xamarin Forms -> Forms App; Nommez le projet comme
EffectsDemo - Sous le projet iOS, ajoutez une nouvelle classe
Effectqui hérite de la classePlatformEffectet remplace les méthodesOnAttached,OnDetachedetOnElementPropertyChangedNotez les deux attributsResolutionGroupNameetExportEffect, nécessaires pourExportEffectcet effet du projet PCL / shared.
OnAttachedest la méthode où la logique de la personnalisation va dansOnDetachedest la méthode par laquelle le nettoyage et leOnDetachedse produisentOnElementPropertyChangedest la méthode qui est déclenchée lors des modifications de propriété de différents éléments. Pour identifier la bonne propriété, vérifiez la modification exacte de la propriété et ajoutez votre logique. Dans cet exemple,OnFocusdonnera la couleurBlueetOutofFocusdonneraRedcouleurRedusing 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); } }}}
Pour consommer cet effet dans l'application, sous le projet
PCL, créez une nouvelle classe nomméeFocusEffectqui hérite deRoutingEffect. Ceci est essentiel pour que le PCL instancie la mise en œuvre spécifique de la plate-forme de l'effet. Exemple de code ci-dessous:using Xamarin.Forms; namespace EffectsDemo { public class FocusEffect : RoutingEffect { public FocusEffect() : base("xhackers.FocusEffect") { } } }Ajouter l'effet au contrôle d'
Entrydans le 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>
Étant donné que l'effet a été implémenté uniquement dans la version iOS, lorsque l'application s'exécute dans iOS Simulator en concentrant les changements de couleur d'arrière-plan Entry et que rien ne se produit dans Android Emulator car l' Effect n'a pas été créé dans le projet Droid

