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

  1. Skapa en ny Xamarin Forms-app med PCL-fil -> Ny lösning -> Multiplatform-app -> Xamarin Forms -> Forms-app; Namnge projektet som EffectsDemo
  2. Under iOS-projektet lägger du till en ny Effect klass som ärver från klassen PlatformEffect och åsidosätter metoderna OnAttached , OnDetached och OnElementPropertyChanged Lägg märke till de två attributen ResolutionGroupName och ExportEffect , 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 in

  • OnDetached är metoden där saneringen och avregistreringen sker

  • OnElementPropertyChanged ä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 ger OnFocus Blue färg och OutofFocus ger Red färg

     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. För att konsumera denna effekt i applikationen skapar du under PCL projektet en ny klass med namnet FocusEffect som ärver från RoutingEffect . 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")
            {
            }
        }
    }
    
  2. 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>
    

Effekter Tillagd för iOS-version

Effekter ignoreras för Droid-versionen

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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow