Поиск…


Вступление

Эффекты упрощают индивидуальные настройки платформы. Когда необходимо изменить свойства Xamarin Forms Control, можно использовать эффекты. Когда необходимо переопределить методы управления Xamarin Forms, можно использовать пользовательские рендереры

Добавление специфичного для платформы эффекта для элемента управления Entry

  1. Создайте новое приложение Xamarin Forms с помощью файла PCL -> Новое решение -> Мультиплатформенное приложение -> Xamarin Forms -> Forms App; Назовите проект как EffectsDemo
  2. В рамках проекта iOS добавьте новый класс Effect который наследует класс PlatformEffect и переопределяет методы OnAttached , OnDetached и OnElementPropertyChanged Обратите внимание на два атрибута ResolutionGroupName и ExportEffect , они необходимы для использования этого эффекта из проекта PCL / shared.
  • OnAttached - это метод, в котором логика настройки

  • OnDetached - это метод, в котором происходит очистка и де-регистрация

  • OnElementPropertyChanged - это метод, который запускается при изменении свойств разных элементов. Чтобы определить правильное свойство, проверьте правильность изменения свойства и добавьте свою логику. В этом примере OnFocus даст Blue цвет, а OutofFocus предоставит Red Color

     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. Чтобы использовать этот эффект в приложении, в проекте PCL создайте новый класс с именем FocusEffect который наследуется от RoutingEffect . Это необходимо для того, чтобы PCL создавал экземпляр конкретной реализации эффекта. Пример кода ниже:

    using Xamarin.Forms;
    namespace EffectsDemo
    {
        public class FocusEffect : RoutingEffect
        {
            public FocusEffect() : base("xhackers.FocusEffect")
            {
            }
        }
    }
    
  2. Добавить эффект в элемент управления Entry в 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>
    

Добавлены эффекты для версии iOS

Эффекты, проигнорированные для версии Droid

Поскольку эффект был реализован только в версии iOS, когда приложение запускается в iOS Simulator при фокусировке изменений цвета фона Entry и ничего не происходит в Android Emulator поскольку Effect не был создан в проекте Droid



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow