#c# #xamarin #xamarin.forms #xamarin.android #xamarin.ios
Вопрос:
Я создал пользовательское представление под названием «Информационная панель».:
public class InfoButton : ImageButton
{
public string Glyph { get; set; } = "U000F02FD";
public string Title { get; set; }
public string Text { get; set; }
public InfoButton()
{
Source = new FontImageSource() { Glyph = Glyph, FontFamily = "materialdesign.ttf#materialdesign", Size= (double)new FontSizeConverter().ConvertFromInvariantString("Title"), Color = Color.Black };
BackgroundColor = Color.Transparent;
Clicked = InfoButton_Clicked;
}
private void InfoButton_Clicked(object sender, EventArgs e)
{
AlertPopup.DisplayAlertPopup(Title, Text, 0, "Close");
}
}
Теперь я создал для этого триггер:
<models:InfoButton Glyph="amp;#xF059F;" Title="some title" Text="some text" IsVisible="false" HorizontalOptions="EndAndExpand">
<models:InfoButton.Triggers>
<MultiTrigger TargetType="{x:Type models:InfoButton}">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding isPublic}" Value="true"/>
<BindingCondition Binding="{Binding isReadonly}" Value="false"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="IsVisible" Value="true"/>
<Setter Property="Glyph" Value="amp;#xF059F;"/>
</MultiTrigger.Setters>
</MultiTrigger>
</models:InfoButton.Triggers>
</models:InfoButton>
Но я получаю эту ошибку при компиляции:
XFC0001 Не может разрешить свойство «Глиф» для типа «infoButton (отсутствует свойство или отсутствуют средства доступа)».
В чем может быть проблема?
Спасибо за вашу помощь.
Ответ №1:
Чтобы просто решить вашу проблему, перейдите в раздел «Решение«. Чтобы узнать причину сбоя вашего кода, см. раздел «Объяснение«.
Решение
Вам придется превратить свою Glyph
собственность в обязательную собственность следующим образом
public static readonly BindableProperty GlyphProperty = BindableProperty.Create(nameof(Glyph), typeof(string), typeof(InfoButton), "U000F02FD");
public string Glyph
{
get { return (string)GetValue(GlyphProperty); }
set { SetValue(GlyphProperty, value); }
}
Объяснение
Объяснение, почему ваш код не работает с Glyph
определенным как простое свойство, можно найти в документе для Setter.Собственность, где написано
С помощью установщика можно задать только привязываемые свойства.