Код: Выделить всё
[ContentProperty(nameof(IconName))]
public class FontImageExtension : IMarkupExtension
{
private readonly IconFontService iconFontService;
[TypeConverter(typeof(FontSizeConverter))]
public double Size { get; set; } = 30d;
public string IconName { get; set; }
public Color Color { get; set; }
public string FontFamily { get; set; }
public FontImageExtension()
{
iconFontService = SomeKindOfContainer.Resolve();
}
public ImageSource ProvideValue(IServiceProvider serviceProvider)
{
if (string.IsNullOrEmpty(IconName))
return null;
IconFont iconFont = iconFontService.GetIconFont();
if (iconFont == null)
return null;
string glyphCode = iconFont.GetGlyphCode(IconName);
if (string.IsNullOrEmpty(glyphCode))
return null;
FontImageSource fontImageSource = new FontImageSource()
{
FontFamily = iconFont.GetPlatformLocation(),
Glyph = glyphCode,
Color = this.Color,
Size = this.Size,
};
return fontImageSource;
}
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
return ProvideValue(serviceProvider);
}
}
< /code>
Большую часть времени я использую его как это в XAML (который уже работает отлично): < /p>
< /code>
Но для динамического пользовательского интерфейса (например, списков или что -то в этом роде) мне это нужно, как это: < /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/63922234/imarkupextension-with-bindable-properties[/url]