【问题标题】:How can I make an Avalonia XAML TextBlock bold according to a binding value?如何根据绑定值将 Avalonia XAML TextBlock 设为粗体?
【发布时间】:2020-01-21 13:41:37
【问题描述】:

我正在使用 AvaloniaUI 制作标签列表 (TextBlocks)。根据基础数据状态,我希望其中一些是粗体的。有人可以向我指出如何根据绑定值在 DataTemplate 中将 TextBlock 设为粗体吗?

商品代码:

    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”类型 我想它当时还没有处理绑定。

请问正确的路径是什么?

【问题讨论】:

  • 你确定你已经实现了 INotifyPropertyChanged 并且正确触发了 DisplayWeight 属性的 PropertyChanged 事件吗?
  • 这里没有任何变化,这是在创建中。但是,如果我需要做更多的工作才能让它发挥作用,我会研究一下。

标签: xaml avaloniaui


【解决方案1】:

好的,下面的 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;
        }
    }

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 2015-10-02
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多