Форма xamarin: пользовательский рендерер не будет выполнен, если пользовательский элемент управления в общей библиотеке

У меня есть два проекта в решении: один - это проект библиотеки, а второй - основной проект приложения.

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

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

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

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

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

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам