수색…


소개

효과로 인해 플랫폼 별 사용자 지정이 간단 해집니다. Xamarin Forms Control의 속성을 수정할 필요가있을 때 효과를 사용할 수 있습니다. Xamarin Forms Control의 메서드를 재정의해야하는 경우 사용자 지정 렌더러를 사용할 수 있습니다.

Entry 컨트롤에 대한 플랫폼 별 효과 추가

  1. PCL 파일 -> 새 솔루션 -> 다중 플랫폼 응용 -> Xamarin Forms -> Forms App을 사용하여 새 Xamarin Forms 응용 프로그램을 만듭니다. 프로젝트의 이름을 EffectsDemoEffectsDemo
  2. iOS 프로젝트에서 PlatformEffect 클래스를 상속 한 새 Effect 클래스를 추가하고 OnAttached , OnDetachedOnElementPropertyChanged 메서드를 재정의합니다. ResolutionGroupNameExportEffect 라는 두 속성을 ResolutionGroupName 합니다.이 속성은 PCL / 공유 프로젝트에서이 효과를 소비하는 데 필요합니다.
  • OnAttached 는 사용자 정의를위한 로직이 OnAttached 메소드입니다.

  • OnDetached 는 정리 및 등록 취소가 발생하는 방법입니다.

  • OnElementPropertyChanged 는 다른 요소의 속성 변경시 트리거되는 메서드입니다. 올바른 속성을 확인하려면 정확한 속성 변경을 확인하고 논리를 추가하십시오. 이 예제에서 OnFocusBlue 을 제공하고 OutofFocusRed 을 제공합니다.

     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. XAML에서 Entry 컨트롤에 효과 추가

    <?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 버전에서 무시 된 효과

Effect가 iOS 버전에서만 구현 되었기 때문에, Entry 배경색 변경에 초점을 맞추고 iOS Simulator 에서 앱을 실행할 때 Droid 프로젝트에서 Effect 가 생성되지 않았기 때문에 Android Emulator 에서 아무 것도 발생하지 않습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow