Загрузите текст уценки в ярлык Xamarin.Forms - PullRequest
0 голосов
/ 06 июля 2018

В последнее время Xamarin.Forms Label поддерживает FormattedText . Поэтому я хочу использовать это свойство FormattedText для загрузки текста уценки. Например,

У меня ниже текст уценки,

 1. **Hi**, How are you?
 2. Hello **John**, _Good Morning_

Я хочу автоматически преобразовать текст уценки, как указано выше, в FormattedString для установки в Label.FormattedText.

Может ли кто-нибудь помочь мне достичь этого?

Примечание : я не хочу использовать сторонние элементы управления MarkdownView, так как они имеют большой вес и имеют некоторые проблемы при визуализации пользовательского интерфейса при проверке на Xamarin.Forms iOS.

1 Ответ

0 голосов
/ 09 июля 2018

Наконец, я написал свой собственный анализ и преобразовал текст уценки в FormattedString.

public static FormattedString GetFormattedString(this string text, double defaultFontSize)
    {
        var boldFormat = "**";
        var italicFormat = "_";
        var formatString = new FormattedString();
        var temp = text;
        while(!string.IsNullOrWhiteSpace(temp))
        {
            try
            {
                var boldIndex = temp.IndexOf(boldFormat);
                var italicIndex = temp.IndexOf(italicFormat);

                if (italicIndex >= 0 && (italicIndex < boldIndex || boldIndex < 0))
                {
                    if (italicIndex > 0)
                    {
                        var t = temp.Substring(0, italicIndex);
                        formatString.Spans.Add(new Span() { Text = t });
                    }
                    temp = temp.Substring(italicIndex + 1);
                    var next = temp.IndexOf(italicFormat);
                    var t1 = temp.Substring(0, next);
                    formatString.Spans.Add(new Span() { Text = t1, FontAttributes = FontAttributes.Italic, FontSize = defaultFontSize });
                    temp = temp.Substring(next + 1);
                }
                else if (boldIndex >= 0)
                {
                    if (boldIndex > 0)
                    {
                        var t = temp.Substring(0, boldIndex);
                        formatString.Spans.Add(new Span() { Text = t });
                    }
                    temp = temp.Substring(boldIndex + 2);
                    var next = temp.IndexOf(boldFormat);
                    var t1 = temp.Substring(0, next);
                    formatString.Spans.Add(new Span() { Text = t1, FontAttributes = FontAttributes.Bold, FontSize = defaultFontSize });
                    temp = temp.Substring(next + 2);
                }
                else
                {
                    formatString.Spans.Add(new Span() { Text = temp, FontSize = defaultFontSize });
                    break;
                }
            }
            catch (Exception)
            {
                formatString = new FormattedString();
                formatString.Spans.Add(new Span() { Text = text, FontSize = defaultFontSize });
                break;
            }
        }
        return formatString;
    }

Примечание. В настоящее время я добавил только код, выделенный жирным шрифтом и курсивом. Необходимо расширить его для необходимых форматов уценки.

...