Buscar..


Introducción

Efectos simplifica las personalizaciones específicas de la plataforma. Cuando es necesario modificar las propiedades de un control de formularios de Xamarin, se pueden usar los efectos. Cuando es necesario anular los métodos de Xamarin Forms Control, se pueden usar renderizadores personalizados

Agregar efecto específico de plataforma para un control de entrada

  1. Cree una nueva aplicación Xamarin Forms utilizando el archivo PCL -> Nueva solución -> Aplicación multiplataforma -> Xamarin Forms -> Aplicación Forms; Nombra el proyecto como EffectsDemo
  2. Bajo el proyecto iOS, agregue una nueva clase de Effect que herede de la clase PlatformEffect y anule los métodos OnAttached , OnDetached y OnElementPropertyChanged Observe los dos atributos ResolutionGroupName y ExportEffect , estos son necesarios para consumir este efecto del PCL / proyecto compartido.
  • OnAttached es el método donde la lógica de personalización entra en OnAttached

  • OnDetached es el método en el que se realiza la limpieza y la OnDetached del registro

  • OnElementPropertyChanged es el método que se desencadena en los cambios de propiedad de diferentes elementos. Para identificar la propiedad correcta, verifique el cambio de propiedad exacto y agregue su lógica. En este ejemplo, OnFocus dará el color Blue y OutofFocus dará Red color 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. Para consumir este efecto en la aplicación, en el proyecto PCL , cree una nueva clase llamada FocusEffect que herede de RoutingEffect . Esto es esencial para que el PCL ejemplifique la implementación específica del efecto en la plataforma. Código de muestra a continuación:

    using Xamarin.Forms;
    namespace EffectsDemo
    {
        public class FocusEffect : RoutingEffect
        {
            public FocusEffect() : base("xhackers.FocusEffect")
            {
            }
        }
    }
    
  2. Agrega el efecto al control de Entry en el 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>
    

Efectos añadidos para la versión iOS

Efectos ignorados para la versión Droid

Dado que el efecto se implementó solo en la versión de iOS, cuando la aplicación se ejecuta en el iOS Simulator al enfocar los cambios de color de fondo de la Entry y no sucede nada en el Android Emulator ya que el Effect no se creó en el proyecto Droid



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow