Xamarin表单WinPhone - 如何使标签文本下划线WinPhone?

时间:2016-08-02 12:56:01

标签: xamarin xamarin.forms win-phone-silverlight-8.1 xamarin.winphone

如何使用 Xamarin表单 WinPhone 中创建标签文字下划线

4 个答案:

答案 0 :(得分:1)

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

public class Exlabel : Label
{
}

在您的Windows手机项目中为其创建Custom Renderer,如下所示,并使用TextBlock.TextDecorations属性设置下划线。 标签在Windows中呈现为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手机,请查看此示例 - How to format texts of TextBlock using xaml in Windows Phone

对于WinRT,您可以使用此 - TextBlock underline in WinRT

在SilverLight WinPhone(旧的且不支持的模板)中,您还可以使用保证金来实现您的需求,类似于How to make an underlined input text field in Windows Phone?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试使用以下xaml;

#import "AppDelegate.h"

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

答案 3 :(得分: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);
    }
  }
 }