2015-01-14 2 views
0

사용자 지정 컨트롤 및 플랫폼 지정 코드로 Xamrin.Forms를 기반으로 사용자 지정 컨트롤 라이브러리를 만들 수 있습니까? 플랫폼 지정 코드가있는 모듈을 추가하려면 posibility를 사용하여 모듈 아키텍처를 만들어야합니다.Xamarin.Forms 사용자 지정 컨트롤 라이브러리

답변

1

설명하는 모든 내용이 이미 Xamarin.Forms 프레임 워크에서 처리됩니다. 특히, 플랫폼 관련 렌더러를 사용하는 UI 컨트롤과 DependencyService를 사용하는 비 UI 코드가 지원됩니다. 두 경우 모두 공통 데이터 구조, 인터페이스 및 View 하위 클래스를 Xamarin.Forms를 참조하고 Android/iOS/Windows Phone 플랫폼을 대상으로하는 공통 라이브러리에 정의하고 다양한 플랫폼을 대상으로하는 어셈블리에 플랫폼 관련 코드를 제공합니다.

UI 컨트롤의 경우 ExportRenderer 특성을 사용하여 플랫폼 별 렌더러 (별칭 : "사용자 지정 렌더러")를 만들어 Xamarin Forms 런타임에 등록합니다. 실제로 이것이 작동해야하는 방식은 "API 어셈블리"(여기서는 Jason Smith가 "모델"이라는 용어를 사용합니다)의 컨트롤을 사용하여 모든 구성 또는 데이터 바인딩을 캡처하고, 그러면 사용자 정의 렌더러는 모델에 포함 된 데이터를 사용하여 네이티브 컨트롤이 어떻게 보이는지/작동 하는지를 결정합니다. 모델 인스턴스 (Xamarin Forms보기가 실제 컨트롤의 동작을 제어하기위한 API 서피스로 사용하는 모델 인스턴스)와 실제로 UI를 그리는 렌더러 인스턴스 (renderer instance)가 실제로 두 인스턴스가 있다는 점에 유의해야합니다. 데이터 바인딩이있는 경우 렌더러가 모델의 바인딩 가능 속성을 변경하여 UI가 모델 상태를 반영 할 수있게해야합니다. 이 주제는 Xamarin's docs for Custom Renderers에 자세히 설명되어 있습니다.

UI가 아닌 코드 (geolocation, 센서 등 "headless"기능)의 경우 DependencyService를 사용할 수 있습니다. UI 컨트롤과 마찬가지로 "API 어셈블리"에있는 추상 API (인터페이스로 표시)를 정의하여 기능에 액세스 할 수있는 플랫폼 독립적 인 방법을 제공하고 DependencyService를 사용하여 등록 된 지원되는 각 플랫폼에 대한 구현을 제공합니다 속성. 실제로 DependencyService는 해당 속성을 사용하여 자동으로 채워지는 Dependency Injection 컨테이너로 생각할 수 있습니다. 이 주제에 대해서는 Xamarin docs for the DependencyService에서 자세히 다룹니다.

+0

감사합니다. 알고 있습니다. 하지만 일부 메서드 및 UI 부분으로 라이브러리를 만들어야합니다. 그래서 PCL 라이브러리와 iOS/Android 라이브러리를 만들었지 만, PCL을 다시 작성했지만 DependecySeervice는 iOS 라이브러리에 저장된 객체의 인스턴스를 얻으려고 할 때 null 값을 반환합니다. – WinterMute

+0

일반적으로 DependencyService의 null 반환은 속성이 ' 현재 또는 잘못된 위치에 있습니다. Dependency 속성이 네임 스페이스 선언 외부에 있는지 확인 했습니까 (구현 유형을 가리킴)? –

+0

예, 물론입니다. 도서관에 문제가 있다고 생각합니다. 제 도서관이 플랫폼 별 라이브러리를 보지 못했기 때문입니다. 이미지와 같은 모양을 만들고 싶습니다. http://take.ms/8yMH7 – WinterMute

관련 문제