#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, чтобы я мог оценить, не связана ли проблема с кодом. Спасибо,