1

如何使用Xamarin FormsWinPhone中制作标签文本下划线

4

4 回答 4

1

您必须在继承自 Label 的 PCL/共享项目中创建一个新控件。

public class Exlabel : Label
{
}

在您的 windows phone 项目中为它创建一个自定义渲染器,如下所示,并使用TextBlock.TextDecorations属性设置下划线。标签在窗口中呈现为TextBlock 。

样品(未经测试):

[assembly: ExportRenderer(typeof(Exlabel), typeof(ExlabelRenderer))]
namespace CustomRenderer.WinPhone81
{
    public class ExlabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.TextDecorations = TextDecorations.UnderLine;
            }
        }
    }
}

如果您使用的是 Windows Phone,请查看此示例 -如何在 Windows Phone 中使用 xaml 格式化 TextBlock 的文本

对于 WinRT,您可以在 WinRT 中使用 - TextBlock 下划线

在 SilverLight WinPhone(旧的且不那么支持的模板)中,您还可以使用 Margin 来实现您所需要的,类似于如何在 Windows Phone 中制作带下划线的输入文本字段?.

于 2016-08-02T14:49:08.430 回答
0

我认为您需要为此创建一个自定义视图作为布局/网格,它有一个标签和一个 BoxView,标签下方有一个小的 heightRequest 以充当一条线。

于 2016-08-02T13:21:21.777 回答
0

尝试使用以下 xaml;

<StackLayout Orientation="Vertical">
    <Label Text="SomeText"/>
    <BoxView HeightRequest="1" HorizontalOptions="FillAndExpand" BackgroundColor="Black"/>
</StackLayout>

这应该适用于所有 3 个平台。:)

于 2016-08-02T13:35:03.917 回答
0

在你的 WinPhone 项目中创建一个标签渲染器:

using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Documents;
[assembly: ExportRenderer(typeof(ExtendedLabel), typeof(ExtendedLabelRenderer))]

namespace SampleProject.WinPhone
{
public class ExtendedLabelRenderer: LabelRenderer
{
    ExtendedLabel element;
    TextBlock control;
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);

        if((ExtendedLabel)Element == null || Control == null)
            return;

        element = (ExtendedLabel)Element;
        control = Control;
        UnderlineText();
    }
    void UnderlineText()
    {
        control.Text = string.Empty;
        Underline ul = new Underline();
        Run run = new Run();
        run.Text = element.Text;
        ul.Inlines.Add(run);
        control.Inlines.Add(ul);
    }
  }
 }
于 2017-01-05T09:36:13.023 回答