Xamarin表单WinPhone-如何使标签文本在WinPhone下划线?
如何使用Xamarin表单在WinPhone中创建标签文本下划线?我认为您需要为此创建一个自定义视图,作为一个布局/网格,其中包含一个标签和一个框视图,该框视图在标签下方有一个小的高度请求作为一条线。尝试使用以下xamlXamarin表单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
<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);
}
}
}