Xamarin Forms WinPhone - Как сделать текст метки подчеркивающим WinPhone?
Как сделать текст метки подчеркиванием в WinPhone с помощью форм Xamarin?
4 ответа
Попробуйте использовать следующий xaml;
<StackLayout Orientation="Vertical">
<Label Text="SomeText"/>
<BoxView HeightRequest="1" HorizontalOptions="FillAndExpand" BackgroundColor="Black"/>
</StackLayout>
это должно сделать это для всех 3 платформ.:)
Вы должны создать новый элемент управления в вашем PCL/ общем проекте, унаследованном от Label.
public class Exlabel : Label
{
}
В вашем проекте Windows Phone создайте для него Custom Renderer следующим образом и используйте свойство TextBlock.TextDecorations, чтобы установить подчеркивание. Метка отображается как TextBlock в Windows.
Образец (непроверено):
[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, ознакомьтесь с этим примером - Как отформатировать тексты TextBlock с помощью xaml в Windows Phone.
Для WinRT вы можете использовать это - подчеркивание TextBlock в WinRT.
В SilverLight WinPhone (старый и не очень поддерживаемый шаблон) вы также можете использовать поле "Поля", чтобы добиться того, что вам требуется, подобно разделу " Как создать подчеркнутое поле для ввода текста в Windows Phone?".,
Я думаю, вам нужно создать собственное представление для этого в виде Layout/Grid с меткой и BoxView с небольшим запросом heightRequest под меткой, который будет действовать как линия.
Создайте средство визуализации меток в своем проекте 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);
}
}
}