Исходя из моего первоначального поста , я пытался создать собственный элемент управления и создать для него шаблон элемента управления, как в WPF, но потерпел неудачу при триггерах. Мне предоставили ссылку, которая указала, что шаблоны управления разрешены не для всех элементов управления, а только для определенных, через другую ссылку S / O, предоставленную @ Raimo для моего другого вопроса.
Так что теперь к части 2. Я изменил элемент управления с типа «Entry» на тип «ContentView», чтобы можно было применить шаблон элемента управления. Так что это единственное, что изменилось
namespace MyAndroidApp
{
public class MyTextboxEntry : ContentView
{
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:myCtrls="clr-namespace:MyAndroidApp"
Теперь перейдем к шаблону управления. Я на самом деле определяю несколько частей в элементе управления, но сокращенно здесь для простого контекста.
<ControlTemplate x:Key="CT_MyTextboxEntry" >
<!--having a grid as an outer wrapper for multiple internal controls...-->
<Grid HorizontalOptions="StartAndExpand" x:Name="UpdateThisGridControl" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150*" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="16" />
</Grid.ColumnDefinitions>
<Entry Text="Sample" Grid.Column="0" />
<Label Text="junk" Grid.Column="1" />
<Image Source="Sample.jpg" Grid.Column="2" />
<Grid.Triggers>
<Trigger TargetType="myCtrls:MyTextboxEntry" Property="IsRequired" Value="True">
<Setter Property="BackgroundColor" Value="Red"/>
</Trigger>
</Grid.Triggers>
</Grid>
</ControlTemplate>
И последний экземпляр элемента управления на странице будет отображаться через
<myCtrls:MyTextboxEntry ControlTemplate="{StaticResource CT_MyTextboxEntry}" />
. моя ошибка находится в разделе Grid.Triggers. Намерение здесь состоит в том, чтобы использовать свойство bindable нового элемента управления вводом (на основе ContentView) с надлежащим объявлением BindableProperty для «IsRequired», но установить цвет фона GRID.
В WPF вы можете сказать используйте триггер из этой вещи здесь, но обновите этот другой элемент управления в шаблоне элемента управления, на который ссылается ссылка «x: Name», которую я имею в качестве «UpdateThisGridControl».
Если я отключаю [Grid .Triggers] часть, элемент управления и шаблон показывают как ожидалось. Как только я включаю триггер, он выходит из строя с
"bindable not an instance of AssociatedType
Но, если учесть, что запись ContentView имеет свойство цвета фона и то же самое делает элемент управления Grid, почему он задыхается при попытке установить с помощью триггера.
Большое спасибо за помощь в привязке этого типа для свойства из пользовательского элемента управления для обновления свойства в указанном c шаблоне элемента управления. Спасибо