Zoeken…


Invoering

Effecten vereenvoudigt platformspecifieke aanpassingen. Wanneer het nodig is om de eigenschappen van een Xamarin Forms Control te wijzigen, kunnen Effecten worden gebruikt. Wanneer het nodig is om de methoden van Xamarin Forms Control te negeren, kunnen aangepaste renderers worden gebruikt

Platformspecifiek effect toevoegen voor een toegangscontrole

  1. Maak een nieuwe Xamarin Forms-app met PCL-bestand -> Nieuwe oplossing -> Multiplatform-app -> Xamarin Forms -> Forms-app; Noem het project als EffectsDemo
  2. Onder de iOS-project, een nieuwe Effect klasse die erft van PlatformEffect klasse en de prioriteit van de methoden OnAttached , OnDetached en OnElementPropertyChanged Let op de twee attributen ResolutionGroupName en ExportEffect , die nodig zijn voor het consumeren van deze ingang van de PCL / gedeelde project.
  • OnAttached is de methode waar de logica voor aanpassing naar binnen gaat

  • OnDetached is de methode waarbij het opschonen en OnDetached plaatsvindt

  • OnElementPropertyChanged is de methode die wordt geactiveerd bij eigenschapsveranderingen van verschillende elementen. Controleer de juiste eigenschapsverandering en voeg uw logica toe om de juiste eigenschap te identificeren. In dit voorbeeld geeft OnFocus de Blue kleur en geeft OutofFocus Red kleur

     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. Om dit effect in de toepassing te FocusEffect , maakt u onder het PCL project een nieuwe klasse met de naam FocusEffect die RoutingEffect van RoutingEffect . Dit is essentieel om de PCL de platformspecifieke implementatie van het effect te laten instantiëren. Voorbeeldcode hieronder:

    using Xamarin.Forms;
    namespace EffectsDemo
    {
        public class FocusEffect : RoutingEffect
        {
            public FocusEffect() : base("xhackers.FocusEffect")
            {
            }
        }
    }
    
  2. Voeg het effect toe aan Entry in de 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>
    

Effecten toegevoegd voor iOS-versie

Effecten genegeerd voor Droid-versie

Aangezien het effect alleen in iOS-versie is geïmplementeerd, wanneer de app in iOS Simulator bij het focussen op de achtergrondkleurveranderingen bij Entry en er gebeurt niets in Android Emulator omdat het Effect niet is gemaakt onder het Droid project



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow