Xamarin.Forms
effekter
Sök…
Introduktion
Effects förenklar plattformsspecifika anpassningar. När det finns ett behov av att modifiera egenskaperna hos Xamarin Forms Control kan Effekter användas. När det finns ett behov av att åsidosätta Xamarin Forms Kontrolls metoder, kan anpassade återgivare användas
Lägga till plattformsspecifik effekt för en postkontroll
- Skapa en ny Xamarin Forms-app med PCL-fil -> Ny lösning -> Multiplatform-app -> Xamarin Forms -> Forms-app; Namnge projektet som
EffectsDemo
- Under iOS-projektet lägger du till en ny
Effect
klass som ärver från klassenPlatformEffect
och åsidosätter metodernaOnAttached
,OnDetached
ochOnElementPropertyChanged
Lägg märke till de två attributenResolutionGroupName
ochExportEffect
, dessa krävs för att konsumera denna effekt från PCL / delat projekt.
OnAttached
är metoden där logiken för anpassning går inOnDetached
är metoden där saneringen och avregistreringen skerOnElementPropertyChanged
är metoden som aktiveras vid egendomsförändringar av olika element. För att identifiera rätt egendom, kolla efter den exakta egendomsändringen och lägg till din logik. I det här exemplet gerOnFocus
Blue
färg ochOutofFocus
gerRed
färgusing 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); } }
}}
För att konsumera denna effekt i applikationen skapar du under
PCL
projektet en ny klass med namnetFocusEffect
som ärver frånRoutingEffect
. Detta är viktigt för att PCL ska kunna initiera den plattformspecifika implementeringen av effekten. Exempelkod nedan:using Xamarin.Forms; namespace EffectsDemo { public class FocusEffect : RoutingEffect { public FocusEffect() : base("xhackers.FocusEffect") { } } }
Lägg till effekten i
Entry
i 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>
Eftersom Effekten endast implementerades i iOS-version, när appen körs i iOS Simulator
efter att fokusera Entry
bakgrundsfärgförändringarna och ingenting händer i Android Emulator
eftersom Effect
inte skapades under Droid
projektet