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

  1. 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
  2. Sous le projet iOS, ajoutez une nouvelle classe Effect qui hérite de la classe PlatformEffect et remplace les méthodes OnAttached , OnDetached et OnElementPropertyChanged Notez les deux attributs ResolutionGroupName et ExportEffect , nécessaires pour ExportEffect cet effet du projet PCL / shared.
  • OnAttached est la méthode où la logique de la personnalisation va dans

  • OnDetached est la méthode par laquelle le nettoyage et le OnDetached se produisent

  • OnElementPropertyChanged 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 couleur Blue et OutofFocus donnera Red couleur Red

     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);
         }
     }
    

    }}

  1. Pour consommer cet effet dans l'application, sous le projet PCL , créez une nouvelle classe nommée FocusEffect qui hérite de RoutingEffect . 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")
            {
            }
        }
    }
    
  2. 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>
    

Effets ajoutés pour la version iOS

Effets ignorés pour la version Droid

É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



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow