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

Xamarin表单WinPhone-如何使标签文本在WinPhone下划线?,xamarin,xamarin.forms,win-phone-silverlight-8.1,xamarin.winphone,Xamarin,Xamarin.forms,Win Phone Silverlight 8.1,Xamarin.winphone,如何使用Xamarin表单在WinPhone中创建标签文本下划线?我认为您需要为此创建一个自定义视图,作为一个布局/网格,其中包含一个标签和一个框视图,该框视图在标签下方有一个小的高度请求作为一条线。尝试使用以下xaml <StackLayout Orientation="Vertical"> <Label Text="SomeText"/> <BoxView HeightRequest="1" HorizontalOptions="FillAndE

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

我认为您需要为此创建一个自定义视图,作为一个布局/网格,其中包含一个标签和一个框视图,该框视图在标签下方有一个小的高度请求作为一条线。

尝试使用以下xaml

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


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

您必须在继承自标签的PCL/共享项目中创建新控件

public class Exlabel : Label
{
}
在windows phone项目中,按如下所示为其创建一个下划线,并使用该属性设置下划线。 标签的渲染方式与在windows中相同

样本(未测试):

[程序集:ExportRenderer(typeof(Exlabel)、typeof(ExlabelRenderer))]
命名空间CustomRenderer.WinPhone81
{
公共类ExlabelRenderer:LabelRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
Control.textdemotations=textdemotations.UnderLine;
}
}
}
}
如果您正在使用windows phone,请查看此示例-

对于WinRT,您可以使用此-


在SilverLight WinPhone(旧的且不受支持的模板)中,您还可以使用边距来实现所需的功能,类似于

在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);
    }
  }
 }
使用Windows.UI.Xaml.Controls;
使用Windows.UI.Xaml.Documents;
[程序集:ExportRenderer(typeof(ExtendedLabel)、typeof(ExtendedLabelRenderer))]
命名空间SampleProject.WinPhone
{
公共类ExtendedLabelRenderer:LabelRenderer
{
扩展标签元素;
文本块控制;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if((ExtendedLabel)元素==null | |控件==null)
返回;
元素=(ExtendedLabel)元素;
控制=控制;
下划线文本();
}
void UnderlineText()
{
control.Text=string.Empty;
下划线ul=新下划线();
运行=新运行();
run.Text=element.Text;
ul.Inlines.Add(运行);
control.Inlines.Add(ul);
}
}
}

标签创建渲染器
,并使用本机WinPhone方法创建带下划线的文本。您看到示例了吗?是@EgorGromadskiy,但我在此中找不到WinPhone的ExtendedLabelRenderer,我找不到此属性!我有以下错误:错误CS1061“TextBlock”不包含“TextDecorations”的定义,并且找不到接受“TextBlock”类型的第一个参数的扩展方法“TextDecorations”(是否缺少using指令或程序集引用?)您在Windows phone project中获得的
控件的类型是什么?是否缺少名称空间,该名称空间在提供的链接中可用<代码>系统.窗口.控件
。请尝试解决编译时错误。我谈论的是Xamarin WinPhone,我不能使用
System.Windows.Controls
,但我们谈论的是
Windows.UI.Xaml.Controls
,这只是绘制高度为1的框视图,与下划线无关。当标签文本较短或指定对齐方式并将其分成两行时,它将中断。我有相同的实现,在文本属性长度上使用数据触发器,这为我提供了一个google material design条目。到目前为止,我对它很满意。:)正如@RohitVipinMathews所说,这实际上只是一个黑客的解决方法,可能会有问题。是的,我找不到其他解决方案
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);
    }
  }
 }