2017-01-15 1 views
0

У меня есть два проекта в решении: один из них - проект библиотеки, а более поздний - основной проект приложения.xamarin form: Пользовательский рендеринг не выполняется, если пользовательский контроль в общей библиотеке

Проект библиотеки содержит: проект общей библиотеки, android и iOS, аналогичный основному проекту для приложения.

Проект библиотеки будет иметь общий код, который я могу повторно использовать.

В проекте библиотеки внутри общей библиотеки у меня есть настраиваемый элемент управления, расширяющий StackLayout, и конкретная платформа будет иметь Renderer, расширяющий пользовательский элемент управления.

Если я поместил весь код в основной проект приложения, Renderer действительно позвонил и смог выполнить касание события, которое я написал для элемента управления. С другой стороны, если код был перемещен в проект библиотеки, у управления больше нет события касания, так как Renderer, написанный на стороне Android, не получил вызов.

Кто-нибудь знает, как я могу заставить обработчик получить вызов?

ответ

1

Вы не можете написать пользовательский визуализатор в общий код, если не использовать директивы препроцессора, как

#if __IOS__ 
    //your ios specific code 
#endif 
#if __ANDROID__ 
    //your android specific code 
#endif 

Может быть, вы расширяете неправильный класс, если вы разместите код, который мы можем помочь лучше; например, я написал код для изменения навигационной панели фона на андроид как этого

public class CustomNavigationRenderer : NavigationRenderer 
{ 
    protected override void OnLayout(bool changed, int l, int t, int r, int b) 
    { 
     base.OnLayout(changed, l, t, r, b); 
     //my own code 

Я haveto расширить Xamarin.Forms.Platform.Android.NavigationRenderer и переопределить OnLayout метод. Надеюсь, что это поможет тебе.

+0

U правы ... Я делаю это в проекте PCL, а теперь все в порядке. – LittleFunny