Xamarin.Forms
effetti
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
- 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
- Sotto il progetto iOS, aggiungi una nuova classe
Effect
che eredita dalla classePlatformEffect
e sovrascrive i metodiOnAttached
,OnDetached
eOnElementPropertyChanged
Notare i due attributiResolutionGroupName
edExportEffect
, necessari per consumare questo effetto dal progetto PCL / condiviso.
OnAttached
è il metodo in cui entra la logica per la personalizzazioneOnDetached
è il metodo in cui avviene la pulizia e laOnDetached
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 coloreBlue
eOutofFocus
darà ColoreRed
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); } }
}}
Per consumare questo effetto nell'applicazione, sotto il progetto
PCL
, creare una nuova classe denominataFocusEffect
che eredita daRoutingEffect
. 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") { } } }
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>
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