Пользовательский вид кнопок (элемент управления) с привязываемыми свойствами, установленными в пользовательском средстве визуализации, не показываемом в приложении или конструкторе

#c# #xaml #xamarin #xamarin.forms

#c# #xaml #xamarin #xamarin.forms

Вопрос:

Недавно я работал со многими Xamarin.Формирует курсы. Я решил, что хочу создать свой собственный элемент управления, который предоставляет доступ к моим собственным связываемым свойствам. Я создал свойство BindableProperty под названием «isCaps» в настраиваемой кнопке:

  public class CustomButton : Button
    {
        public static BindableProperty IsUpperCaseProperty =
            BindableProperty.Create(nameof(IsUpperCase), typeof(bool), typeof(CustomButton), false);

        public bool IsUpperCase
        {
            get => (bool)GetValue(IsUpperCaseProperty);
            set => SetValue(IsUpperCaseProperty, value);
        }
    }
 

Кажется неплохим, не так ли?

Итак, я создал пользовательский рендерер, который добавит функциональность следующим образом:

 [assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))]
namespace ButtonLowerUpper.Droid.CustomRenderers
{
    public class CustomButtonRenderer : ButtonRenderer
    {
        public CustomButtonRenderer(Context context) : base(context)
        {
        }
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
        {
            base.OnElementChanged(e);

            if (Element is CustomButton button)
            {
                Control.SetAllCaps(button.IsUpperCase);
            }
        }
    }
}
 

Хорошо, итак, теперь я создал страницу следующим образом:

 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:controls="clr-namespace:ButtonLowerUpper.CustomControls"
             x:Class="button.MainPage">
    <controls:CustomButton Text="hi" IsUpperCase=false/>
</ContentPage>
 

Теперь — самое странное — ничего не обновляется ни в моем приложении, НИ в моем дизайнере:

введите описание изображения здесь

Моя кнопка по-прежнему находится в верхнем регистре, даже если установлено значение false. Я выполнил все необходимые инструкции — и я понятия не имею, почему это не работает.

Я ищу помощь по этому поводу — я хочу создать свою собственную библиотеку пользовательских элементов управления, но это будет невозможно, пока не будет решен шаг 1.

Спасибо,

Прямо сейчас я продолжу заканчивать курс Pluralsight по Xamarin.Формы, но когда кто-то даст ответ, я проверю его и посмотрю, работает ли он, и если это так, я установлю это как правильный ответ.

tommy99

Комментарии:

1. Если я что-то не очень хорошо объяснил, пожалуйста, ответьте на этот комментарий — спасибо.

2. Я протестировал ваш код, и он работает нормально. Я предполагаю IsUpperCase=false , что вместо IsUpperCase="False" этого это опечатка, в любом случае, я не знаю, в чем проблема.

3. Удалите файлы bin / obj и повторите попытку или, возможно, попробуйте в устройстве вместо симулятора.

4. Привет, Шубхан Тяги — это была опечатка (в моем реальном решении написано «False»). Прежде всего скажите мне, что такое Xamarin. Вы используете версию Forms. Может быть, вы могли бы позволить мне получить доступ к вашему решению через GitHub, если это нормально? (Я не знаю, разрешено ли это.)

5. Было бы здорово, если бы вы могли сделать репозиторий через GitHub, чтобы я мог оценить, не связана ли проблема с кодом. Спасибо,