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
Effect
qui hérite de la classePlatformEffect
et remplace les méthodesOnAttached
,OnDetached
etOnElementPropertyChanged
Notez les deux attributsResolutionGroupName
etExportEffect
, nécessaires pourExportEffect
cet effet du projet PCL / shared.
OnAttached
est la méthode où la logique de la personnalisation va dansOnDetached
est la méthode par laquelle le nettoyage et leOnDetached
se produisentOnElementPropertyChanged
est 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,OnFocus
donnera la couleurBlue
etOutofFocus
donneraRed
couleurRed
using 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éeFocusEffect
qui 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'
Entry
dans 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