1

Как я могу сделать Label текстовому Подчеркивание в WinPhone с использованием Xamarin Forms?Xamarin Forms WinPhone - Как сделать текст ярлыка Подчеркнутый WinPhone?

+1

Создание визуализации для 'label' и использовать родной ** WinPhone ** подход к созданию подчеркнутый текст. –

+0

Вы видели [это] (https://github.com/XLabs/Xamarin-Forms-Labs/wiki/ExtendedLabel) образец? –

+0

Да @EgorGromadskiy, но я не могу найти ** ExtendedLabelRenderer ** для WinPhone в этом [github repo] (https://github.com/XLabs/Xamarin-Forms-Labs/wiki/ExtendedLabel#platform-code) –

ответ

0

Попробуйте использовать следующие xaml;

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

Это должно быть сделано для всех трех платформ. :)

+1

Это просто рисует окно с высотой 1 и не имеет ничего общего с подчеркиванием. Это сломается, если текст ярлыка короче или вы указываете выравнивание и когда он переходит в 2 строки. –

+0

У меня такая же реализация с триггером данных по длине текста, и это дает мне запись в конструкцию материала Google. Я доволен этим до сих пор. :) –

+0

Как сказал @RohitVipinMathews, это действительно просто хакерское решение и потенциально может иметь проблемы. – jbyrd

0

Я думаю, вам нужно создать пользовательский вид для этого как Layout/Grid, который имеет ярлык и BoxView с небольшим heightRequest под меткой, чтобы действовать как строка.

+0

Да, я могу Найти другое решение –

1

У вас есть верхний создать новый элемент управления в вашем PCL/совместном проекте, наследующем от Label.

public class Exlabel : Label 
{ 
} 

В ваших окнах телефон проект создания Custom Renderer для него следующим образом и использовать TextBlock.TextDecorations свойство установить подчеркивание. Метка отображается как TextBlock в окнах.

Sample (непроверенных):

[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 (старый и не поддерживаемый шаблон) вы также можете использовать Margin для достижения того, что вам нужно, подобно How to make an underlined input text field in Windows Phone?.

+0

Я не могу найти это свойство! У меня есть эта ошибка: Ошибка \t CS1061 \t «TextBlock» не содержит определения для «TextDecorations» и никакого метода расширения «TextDecorations», принимающий первый аргумент типа «TextBlock», может быть найден (вам не хватает директивы using или сборка?) –

+0

Каков тип, который вы получаете для 'Control' в проекте телефона Windows? –

+0

'TextBlock', вы можете увидеть это в своем сообщении об ошибке –

0

Создать ярлык визуализатор в вашем 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); 
    } 
    } 
}