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
Effectklass som ärver från klassenPlatformEffectoch åsidosätter metodernaOnAttached,OnDetachedochOnElementPropertyChangedLägg märke till de två attributenResolutionGroupNameochExportEffect, 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 gerOnFocusBluefärg ochOutofFocusgerRedfä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
PCLprojektet en ny klass med namnetFocusEffectsom ä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
Entryi 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

