IMarkupExtension с привязываемыми свойствамиC#

Место общения программистов C#
Ответить
Anonymous
 IMarkupExtension с привязываемыми свойствами

Сообщение Anonymous »

Я создал IMarkupExtension для ImageSource, который получает указанный символ из указанного шрифта и отображает его в указанном цвете с указанной высотой. В большинстве случаев имя значка является статическим, и я записываю его напрямую в XAML. Но иногда существуют списки вещей, у которых есть свойство, определяющее, какой значок следует использовать. В этом случае необходимо, чтобы имя значка было привязываемым.
Вот (более или менее) текущее состояние моего FontImageExtension:

Код: Выделить всё

[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);
}
}
Большую часть времени я использую это в XAML следующим образом (который уже отлично работает): Но для динамического пользовательского интерфейса (например, списков или чего-то еще) мне нужно вот так:

Код: Выделить всё


Подробнее здесь: [url]https://stackoverflow.com/questions/63922234/imarkupextension-with-bindable-properties[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»