Xamarin Forms WinPhone - 如何使标签文本在 WinPhone 下划线?
Xamarin Forms WinPhone - How to make Label Text Underline WinPhone?
如何使用在WinPhone中制作标签文本下划线 Xamarin 表单 ?
我认为您需要为此创建一个自定义视图,作为一个 Layout/Grid,它有一个 Label 和一个 BoxView,在标签下方有一个小的 heightRequest 作为一条线。
尝试使用以下 xaml;
<StackLayout Orientation="Vertical">
<Label Text="SomeText"/>
<BoxView HeightRequest="1" HorizontalOptions="FillAndExpand" BackgroundColor="Black"/>
</StackLayout>
这应该适用于所有 3 个平台。 :)
您必须在继承自 Label 的 PCL/shared 项目中创建一个新控件。
public class Exlabel : Label
{
}
在您的 windows phone 项目中创建一个 Custom Renderer for it as follows and use the 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 phone,请查看此示例 - 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?。
在您的 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);
}
}
}
如何使用在WinPhone中制作标签文本下划线 Xamarin 表单 ?
我认为您需要为此创建一个自定义视图,作为一个 Layout/Grid,它有一个 Label 和一个 BoxView,在标签下方有一个小的 heightRequest 作为一条线。
尝试使用以下 xaml;
<StackLayout Orientation="Vertical">
<Label Text="SomeText"/>
<BoxView HeightRequest="1" HorizontalOptions="FillAndExpand" BackgroundColor="Black"/>
</StackLayout>
这应该适用于所有 3 个平台。 :)
您必须在继承自 Label 的 PCL/shared 项目中创建一个新控件。
public class Exlabel : Label
{
}
在您的 windows phone 项目中创建一个 Custom Renderer for it as follows and use the 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 phone,请查看此示例 - 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?。
在您的 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);
}
}
}