Как сделать часть текста жирным в словаре ресурсов - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть строка, определенная в словаре ресурсов как

<x:String x:Key="MyString">This is a resource</x:String>

в моем xaml.

Я использую эту строку в TextBlock.

Есть ли способ, которым я могу это сделать? Это так смело.

<TextBlock Text="{StaticResource MyString}"/>

Я не могу использовать Run, поскольку эта строка будет переведена на другой язык, например немецкий.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы можете оформить свою строку с inline document elements как <Bold>, <Italic>, <Underline> или даже<Run>.

Escape special characters из вашей строки.

Использование Inlines присоединенного свойства, которое преобразует вашу строку во встроенные элементы.

Пример

<TextBlock local:Inlines.Text="{StaticResource MyString}"/>

Где MyString определяется как

<x:String x:Key="MyString">&lt;Bold&gt;This&lt;/Bold&gt; is a resource</x:String>

Результат будет

enter image description here

Полный исходный код вложенного свойства Inlines

public class Inlines
{
    public static readonly DependencyProperty TextProperty = DependencyProperty.RegisterAttached("Text",
        typeof(string), typeof(Inlines), new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.AffectsMeasure, OnTextPropertyChanged));

    public static void SetText(DependencyObject @do, string value)
    {
        @do.SetValue(TextProperty, value);
    }

    public static string GetText(DependencyObject @do)
    {
        return (string)@do.GetValue(TextProperty);
    }

    private static void OnTextPropertyChanged(DependencyObject @do, DependencyPropertyChangedEventArgs e)
    {
        var textBlock = @do as TextBlock;

        if (textBlock == null)
        {
            throw new InvalidOperationException("This property may only be set on TextBox");
        }

        var value = GetText(@do);

        var text = "<Span xml:space=\"preserve\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">" +
             $"{value ?? string.Empty}</Span>";

        textBlock.Inlines.Clear();

        using (var xmlReader = XmlReader.Create(new StringReader(text)))
        {
            var result = (Span)XamlReader.Load(xmlReader);
            textBlock.Inlines.Add(result);
        }
    }
}
0 голосов
/ 07 февраля 2019

Строки - это просто последовательность символов - они не имеют никакого форматирования, это свойство отображения.

Если вы хотите отобразить часть текста жирным шрифтом, самый простой способ - разделить его надве части, и связать их, чтобы отделить Run элементы в TextBlock.Это может вызвать проблемы при переводе на другие языки, поскольку порядок слов, вероятно, будет другим.

Альтернативой является включение некоторых кодов форматирования в текстовую строку и использование элемента управления, который будет их интерпретировать.в требуемые характеристики дисплея.Использование HTML и добавление элемента управления веб-браузера к вашему окну кажется излишним просто для отображения некоторого форматированного текста.Тем не менее, я написал о таком элементе управления, расширенном текстовом блоке, который распознает псевдо-поднабор тегов HTML внутри текстовой строки, в недавнем посте в блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...