Xamarin.Forms
Efekty
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
- Utwórz nową aplikację Xamarin Forms za pomocą pliku PCL -> Nowe rozwiązanie -> Aplikacja wieloplatformowa -> Xamarin Forms -> Aplikacja Forms; Nazwij projekt jako
EffectsDemo - W ramach projektu iOS dodaj nową klasę
Effectktóra dziedziczy z klasyPlatformEffecti zastępuje metodyOnAttached,OnDetachediOnElementPropertyChangedZwróć uwagę na dwa atrybutyResolutionGroupNameiExportEffect, które są wymagane do wykorzystania tego efektu z projektu PCL / współdzielonego.
OnAttachedto metoda, w którąOnAttachedsię logika dostosowywaniaOnDetachedto metoda, w której odbywa się czyszczenie i wyrejestrowywanieOnElementPropertyChangedto 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ładzieOnFocusda kolorBlueaOutofFocuskolorRedusing 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); } }}}
Aby wykorzystać ten efekt w aplikacji, w ramach projektu
PCLutwórz nową klasę o nazwieFocusEffectktóra będzie dziedziczyć poRoutingEffect. 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") { } } }Dodaj efekt do kontroli
Entryw 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>
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

