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);
    }
  }
 }
Другие вопросы по тегам