Как сделать текстовый блок XAML Avalonia жирным в соответствии со значением привязки? - PullRequest
0 голосов
/ 21 января 2020

Я использую AvaloniaUI для создания списка меток (TextBlocks). Я хочу, чтобы некоторые из них были выделены жирным шрифтом в соответствии с состоянием данных. Может кто-нибудь указать мне, как сделать TextBlock в DataTemplate жирным шрифтом или нет в соответствии с обязательным значением, пожалуйста?

Код изделия:

    public FontWeight DisplayWeight() => !IsBold ? FontWeight.Black : FontWeight.Bold;

Код шаблона:

    <DataTemplate>
      <TextBlock Margin="4" TextWrapping="Wrap" FontWeight="{Binding DisplayWeight}" Text="{Binding Description}"/>
    </DataTemplate>

Работает с жестким кодированием веса.

Итак, я попробовал стиль:

    public string DisplayClass() => IsBold ? "h1" : "p";

    <TextBlock Margin="4" TextWrapping="Wrap" Classes="{Binding DisplayClass}" Text="{Binding Description}"/>

При запуске появляется ошибка: не удается привести объект типа 'Avalonia.Data.Binding' к типу 'System.String' I предположим, что он не обработал привязку в этот момент.

Какой правильный путь, пожалуйста?

1 Ответ

0 голосов
/ 22 января 2020

Хорошо, следующая строка XAML:

 <TextBlock Margin="4" TextWrapping="Wrap" FontWeight="{Binding DisplayWeight}" Text="{Binding Description}"/>

работала, когда к объекту, который я хотел отобразить, были применены следующие строки:

    private FontWeight _displayWeight = FontWeight.Normal;
    private bool _isBold;

    public FontWeight DisplayWeight
    {
        get { return _displayWeight; }
        set { this.RaiseAndSetIfChanged(ref this._displayWeight, value); }
    }

    public bool IsBold
    {
        get => _isBold;
        set
        {
            _isBold = value;
            DisplayWeight = _isBold ? FontWeight.Bold : FontWeight.Normal;
        }
    }
...