Xamarin.Forms
Последствия
Поиск…
Вступление
Эффекты упрощают индивидуальные настройки платформы. Когда необходимо изменить свойства Xamarin Forms Control, можно использовать эффекты. Когда необходимо переопределить методы управления Xamarin Forms, можно использовать пользовательские рендереры
Добавление специфичного для платформы эффекта для элемента управления Entry
- Создайте новое приложение Xamarin Forms с помощью файла PCL -> Новое решение -> Мультиплатформенное приложение -> Xamarin Forms -> Forms App; Назовите проект как
EffectsDemo
- В рамках проекта iOS добавьте новый класс
Effect
который наследует классPlatformEffect
и переопределяет методыOnAttached
,OnDetached
иOnElementPropertyChanged
Обратите внимание на два атрибутаResolutionGroupName
иExportEffect
, они необходимы для использования этого эффекта из проекта PCL / shared.
OnAttached
- это метод, в котором логика настройкиOnDetached
- это метод, в котором происходит очистка и де-регистрацияOnElementPropertyChanged
- это метод, который запускается при изменении свойств разных элементов. Чтобы определить правильное свойство, проверьте правильность изменения свойства и добавьте свою логику. В этом примереOnFocus
дастBlue
цвет, аOutofFocus
предоставитRed
Colorusing 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); } }
}}
Чтобы использовать этот эффект в приложении, в проекте
PCL
создайте новый класс с именемFocusEffect
который наследуется отRoutingEffect
. Это необходимо для того, чтобы PCL создавал экземпляр конкретной реализации эффекта. Пример кода ниже:using Xamarin.Forms; namespace EffectsDemo { public class FocusEffect : RoutingEffect { public FocusEffect() : base("xhackers.FocusEffect") { } } }
Добавить эффект в элемент управления
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, когда приложение запускается в iOS Simulator
при фокусировке изменений цвета фона Entry
и ничего не происходит в Android Emulator
поскольку Effect
не был создан в проекте Droid