Suche…


Einführung

Effekte vereinfachen plattformspezifische Anpassungen. Wenn die Eigenschaften eines Xamarin Forms-Steuerelements geändert werden müssen, können Effekte verwendet werden. Wenn die Methoden des Xamarin Forms Control überschrieben werden müssen, können benutzerdefinierte Renderer verwendet werden

Plattformspezifischen Effekt für ein Entry-Control hinzufügen

  1. Erstellen Sie eine neue Xamarin Forms App mit PCL-Datei -> Neue Lösung -> Plattformübergreifende App -> Xamarin Forms -> Forms App. EffectsDemo das Projekt als EffectsDemo
  2. OnElementPropertyChanged Sie im iOS-Projekt eine neue Effect Klasse hinzu, die von der PlatformEffect Klasse erbt und die Methoden OnAttached , OnDetached und OnElementPropertyChanged OnDetached OnElementPropertyChanged Sie die beiden Attribute ResolutionGroupName und ExportEffect . Diese sind erforderlich, um diesen Effekt aus dem PCL / Shared-Projekt zu verwenden.
  • OnAttached ist die Methode, bei der die Anpassungslogik verwendet wird

  • OnDetached ist die Methode, bei der das Bereinigen und OnDetached der Registrierung erfolgt

  • OnElementPropertyChanged ist die Methode, die bei Eigenschaftsänderungen verschiedener Elemente ausgelöst wird. Um die richtige Eigenschaft zu identifizieren, überprüfen Sie die genaue Eigenschaftsänderung und fügen Sie Ihre Logik hinzu. In diesem Beispiel gibt OnFocus die Blue Farbe und OutofFocus die Red Farbe

     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. So verwenden Sie diesen Effekt in der Anwendung: Erstellen Sie im PCL Projekt eine neue Klasse mit dem Namen FocusEffect die von RoutingEffect erbt. Dies ist wichtig, damit die PCL die plattformspezifische Implementierung des Effekts instanziiert. Beispielcode unten:

    using Xamarin.Forms;
    namespace EffectsDemo
    {
        public class FocusEffect : RoutingEffect
        {
            public FocusEffect() : base("xhackers.FocusEffect")
            {
            }
        }
    }
    
  2. Fügen Sie den Effekt zur Entry in der XAML hinzu

    <?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>
    

Effekte für iOS-Version hinzugefügt

Für die Droid-Version ignorierte Effekte

Da war der Effekt nur in iOS - Version umgesetzt werden , wenn die Anwendung in läuft iOS Simulator die beim Fokussieren Entry Hintergrundfarbe ändert und nichts passiert in Android Emulator als der Effect nicht unter erstellt wurde Droid Projekt



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow