Ricerca…


introduzione

Gli effetti semplificano le personalizzazioni specifiche della piattaforma. Quando è necessario modificare le proprietà di Xamarin Forms Control, è possibile utilizzare gli effetti. Quando è necessario sovrascrivere i metodi di Xamarin Forms Control, è possibile utilizzare i renderer personalizzati

Aggiunta di effetti specifici per piattaforma per un controllo di entrata

  1. Crea una nuova app Xamarin Forms utilizzando il file PCL -> Nuova soluzione -> App multipiattaforma -> Moduli Xamarin -> App moduli; Assegna un nome al progetto come EffectsDemo
  2. Sotto il progetto iOS, aggiungi una nuova classe Effect che eredita dalla classe PlatformEffect e sovrascrive i metodi OnAttached , OnDetached e OnElementPropertyChanged Notare i due attributi ResolutionGroupName ed ExportEffect , necessari per consumare questo effetto dal progetto PCL / condiviso.
  • OnAttached è il metodo in cui entra la logica per la personalizzazione

  • OnDetached è il metodo in cui avviene la pulizia e la OnDetached

  • OnElementPropertyChanged è il metodo che viene attivato in base alle modifiche alle proprietà di diversi elementi. Per identificare la proprietà giusta, controlla la modifica esatta della proprietà e aggiungi la tua logica. In questo esempio, OnFocus darà il colore Blue e OutofFocus darà Colore 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. Per consumare questo effetto nell'applicazione, sotto il progetto PCL , creare una nuova classe denominata FocusEffect che eredita da RoutingEffect . Questo è essenziale per far sì che il PCL installi l'implementazione specifica della piattaforma dell'effetto. Esempio di codice qui sotto:

    using Xamarin.Forms;
    namespace EffectsDemo
    {
        public class FocusEffect : RoutingEffect
        {
            public FocusEffect() : base("xhackers.FocusEffect")
            {
            }
        }
    }
    
  2. Aggiungi l'effetto al controllo Entry in 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>
    

Effetti aggiunti per la versione iOS

Effetti ignorati per la versione Droid

Poiché l'effetto è stato implementato solo nella versione iOS, quando l'app viene eseguita in iOS Simulator dopo aver focalizzato le modifiche al colore di sfondo della Entry e non accade nulla in Android Emulator poiché l' Effect non è stato creato nel progetto Droid



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow