gpt4 book ai didi

xamarin - 有没有一种方法可以在标签中使用 Span 并证明它是合理的?

转载 作者:行者123 更新时间:2023-12-04 19:29:05 25 4
gpt4 key购买 nike

我正在使用此代码为标签内的文本添加一些颜色:

<Label.FormattedText>
<FormattedString>
<Span Text="I would like the word " />
<Span Text="HERE" ForegroundColor="Red" FontAttributes="Bold" />
<Span Text="to be in a bold font" />
</FormattedString>
</Label.FormattedText>

以前我一直使用这个渲染代码来证明标签的合理性:
public class JustifiedLabelRenderer : LabelRenderer
{
public JustifiedLabelRenderer() {}

protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);

//if we have a new forms element, we want to update text with font style (as specified in forms-pcl) on native control
if (e.NewElement != null)
UpdateTextOnControl();
}

protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);

//if there is change in text or font-style, trigger update to redraw control
if (e.PropertyName == nameof(Label.Text)
|| e.PropertyName == nameof(Label.FontFamily)
|| e.PropertyName == nameof(Label.FontSize)
|| e.PropertyName == nameof(Label.TextColor)
|| e.PropertyName == nameof(Label.FontAttributes))
{
UpdateTextOnControl();
}
}

void UpdateTextOnControl()
{
if (Control == null)
return;

//define paragraph-style
var style = new NSMutableParagraphStyle()
{
Alignment = UITextAlignment.Justified,
FirstLineHeadIndent = 0.001f,
};

//define attributes that use both paragraph-style, and font-style
var uiAttr = new UIStringAttributes()
{
ParagraphStyle = style,
BaselineOffset = 0,

Font = Control.Font
};

//define frame to ensure justify alignment is applied
Control.Frame = new System.Drawing.RectangleF(0, 0, (float)Element.Width, (float)Element.Height);

//set new text with ui-style-attributes to native control (UILabel)
var stringToJustify = Control.Text ?? string.Empty;
var attributedString = new Foundation.NSAttributedString(stringToJustify, uiAttr.Dictionary);
Control.AttributedText = attributedString;
Control.Lines = 0;
}

当我尝试使用此代码获得彩色对齐标签时,对跨度字体和颜色的更改不再显示。

有没有办法让我的标签既合理又内部有颜色跨度?

这是我使用的标签的 XAML 定义:
<local:JustifiedLabel x:Name="c0Label" />

这是填充它的代码:
var s = new FormattedString();
s.Spans.Add(new Span { Text = "test words test words test words test words test words test words", ForegroundColor = Color.Red});
s.Spans.Add(new Span { Text = "ABCDEFG", ForegroundColor = Color.Black });
s.Spans.Add(new Span { Text = " test words test words test words test words test words test words test words test words test words test words test words test words ", ForegroundColor = Color.FromHex("555555") });
c0Label.FormattedText = s;

最佳答案

您必须更新渲染器才能考虑 FormattedText .例如:尝试将渲染器逻辑更改为以下内容:

public class JustifiedLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);

//if we have a new forms element, update text
if (e.NewElement != null)
UpdateTextOnControl();
}

protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);

//if there is change in formatted-text, trigger update to redraw control
if (e.PropertyName == nameof(Label.FormattedText))
{
UpdateTextOnControl();
}
}

void UpdateTextOnControl()
{
if (Control == null)
return;

//define paragraph-style
var style = new NSMutableParagraphStyle()
{
Alignment = UITextAlignment.Justified,
FirstLineHeadIndent = 0.001f,

};

//define frame to ensure justify alignment is applied
Control.Frame = new RectangleF(0, 0, (float)Element.Width, (float)Element.Height);
Control.Lines = 0;

if (Element.FormattedText.ToAttributed(Element.Font, Element.TextColor) is NSMutableAttributedString attrText)
{
var fullRange = new NSRange(0, attrText.Length);
attrText.AddAttribute(UIStringAttributeKey.ParagraphStyle, style, fullRange);
Control.AttributedText = attrText;
}
}
}

关于xamarin - 有没有一种方法可以在标签中使用 Span 并证明它是合理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46970713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com