Я работал над приложением Android, используя Xamarin. Большинство работает нормально, но теперь я застрял в производном элементе управления и пытаюсь применить к нему пользовательский «ControlTemplate». Я сделал сложные пользовательские элементы управления в C # / WPF, но, похоже, не похоже на работу под Xamarin. Надеюсь, что-то простое.
Код позже, но предпосылка. Я получаю элемент управления «Entry» (текстовое поле) для «MyTextboxEntry». Этот класс будет иметь привязываемое свойство "IsRequired" (bool). Если требуется контроль ввода текста, я хочу показать метку «*» перед текстовым полем и сделать фоновый цвет синим. Опять же, это просто ПРОСТОЙ пример того, к чему я стремлюсь.
Насколько это возможно ...
КЛАСС, полученный из записи с BindableProperty
namespace MyAndroidApp
{
public class MyTextboxEntry : Entry
{
public MyTextboxEntry()
{}
public static readonly BindableProperty IsRequiredProperty
= BindableProperty.Create(nameof(IsRequired), typeof(bool),
typeof(MyTextboxEntry), false, BindingMode.TwoWay);
public bool IsRequired
{
get { return (bool)GetValue(IsRequiredProperty); }
set { SetValue(IsRequiredProperty, value); }
}
}
}
xmlns в открытии страницы содержимого, чтобы квалифицировать пространство имен для класса ...
xmlns:myCtrls="clr-namespace:MyAndroidApp"
На моей странице содержимого я заглушил попытки создания триггеров / шаблона управления но терпит неудачу.
<ContentPage.Resources>
<Style TargetType="myCtrls:MyTextboxEntry" >
<Style.Setters>
<Setter Property="TextColor" Value="Blue" />
<Setter Property="BackgroundColor" Value="Yellow" />
<!--<Setter Property="ControlTemplate" >
<Setter.Value>
<ContentPresenter />
</Setter.Value>
</Setter>-->
</Style.Setters>
<!--<Style.Triggers>
<Trigger Property="IsRequired" Value="True">
<Setter Property="BackgroundColor" Value="Red" />
</Trigger>
</Style.Triggers>-->
</Style>
</ContentPage.Resources>
И, наконец, внутри самой страницы контента
<StackLayout>
<myCtrls:MyTextboxEntry Text="My Sample Text"
IsRequired="True" />
</StackLayout>
Во-первых, в области комментариев о «ControlTemplate» и «ContentPresenter» я, очевидно, хочу определить подконтекст элемента управления для отображения «*», а затем элемент управления вводом текстового поля, основанный на триггере «IsRequired» = true.
Если я раскомментирую область ControlTemplate, программа не будет скомпилирована, с ней произойдет сбой. Msgstr "Невозможно разрешить ControlTemplate для MyTextboxEntry".
Без явного шаблона элемента управления, по крайней мере, отображается раскраска (хотя basi c), поэтому я знаю, что все остальное установлено правильно, а свойство привязки корректно, поскольку синтаксис xaml распознает его как заполнено без ошибок.
Опять же, надеюсь, что-то глупое-простое я пропустил, но попытался довести его до минимума в совершенно новом "пустом" проекте только с главной страницей.