Szukaj…


Wprowadzenie

Efekty upraszczają dostosowania specyficzne dla platformy. Gdy zachodzi potrzeba modyfikacji właściwości formantu Xamarin Forms, można zastosować Efekty. Gdy zachodzi potrzeba zastąpienia metod Xamarin Forms Control, można użyć niestandardowych mechanizmów renderujących

Dodanie efektu specyficznego dla platformy do kontroli wejścia

  1. Utwórz nową aplikację Xamarin Forms za pomocą pliku PCL -> Nowe rozwiązanie -> Aplikacja wieloplatformowa -> Xamarin Forms -> Aplikacja Forms; Nazwij projekt jako EffectsDemo
  2. W ramach projektu iOS dodaj nową klasę Effect która dziedziczy z klasy PlatformEffect i zastępuje metody OnAttached , OnDetached i OnElementPropertyChanged Zwróć uwagę na dwa atrybuty ResolutionGroupName i ExportEffect , które są wymagane do wykorzystania tego efektu z projektu PCL / współdzielonego.
  • OnAttached to metoda, w którą OnAttached się logika dostosowywania

  • OnDetached to metoda, w której odbywa się czyszczenie i wyrejestrowywanie

  • OnElementPropertyChanged to metoda uruchamiana po zmianie właściwości różnych elementów. Aby zidentyfikować właściwą właściwość, sprawdź dokładną zmianę właściwości i dodaj swoją logikę. W tym przykładzie OnFocus da kolor Blue a OutofFocus kolor 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. Aby wykorzystać ten efekt w aplikacji, w ramach projektu PCL utwórz nową klasę o nazwie FocusEffect która będzie dziedziczyć po RoutingEffect . Jest to niezbędne, aby PCL utworzył instancję specyficzną dla platformy implementacji efektu. Przykładowy kod poniżej:

    using Xamarin.Forms;
    namespace EffectsDemo
    {
        public class FocusEffect : RoutingEffect
        {
            public FocusEffect() : base("xhackers.FocusEffect")
            {
            }
        }
    }
    
  2. Dodaj efekt do kontroli Entry w 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>
    

Dodano efekty dla wersji iOS

Efekty ignorowane dla wersji Droid

Ponieważ efekt został zaimplementowany tylko w wersji iOS, kiedy aplikacja działa w iOS Simulator po skupieniu się na zmianach koloru tła Entry i nic się nie dzieje w Android Emulator ponieważ Effect nie został utworzony w projekcie Droid



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow