Форма 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. Надеюсь, это поможет вам.