1

Comment puis-je faire Étiquette texte Souligné dans WinPhone utilisant Xamarin Forms?Xamarin Forms WinPhone - Comment faire pour souligner le texte de l'étiquette WinPhone?

+1

Créer 'label' pour renderer et utiliser natif ** WinPhone ** pour créer surlignés. –

+0

Avez-vous vu cet exemple (https://github.com/XLabs/Xamarin-Forms-Labs/wiki/ExtendedLabel)? –

+0

Oui @EgorGromadskiy mais je ne peux pas trouver ** ExtendedLabelRenderer ** pour WinPhone dans ce [github repo] (https://github.com/XLabs/Xamarin-Forms-Labs/wiki/ExtendedLabel#platform-code) –

Répondre

0

Essayez d'utiliser xaml suivant;

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

cela devrait le faire pour les 3 plates-formes. :)

+1

Cela dessine simplement une vue en boîte avec la hauteur 1 et n'a rien à voir avec le soulignement. Il se casse lorsque le texte de votre étiquette est plus court ou que vous spécifiez l'alignement et quand il entre dans 2 lignes. –

+0

J'ai la même implémentation avec un déclencheur de données sur la longueur de la propriété de texte et cela me fournit une entrée de conception de matériel google. Je suis content avec ça jusqu'à maintenant. :) –

+0

Comme @RohitVipinMathews a dit, c'est vraiment juste une solution de contournement hacky et aurait potentiellement des problèmes. – jbyrd

0

Je pense que vous devez créer une vue personnalisée pour cela comme une mise en page/grille qui a une étiquette et un BoxView avec une petite heightRequest sous l'étiquette pour agir comme une ligne.

+0

Oui je peux Ne pas trouver une autre solution –

1

Vous avez créé un nouveau contrôle dans votre projet PCL/partagé héritant de Label.

public class Exlabel : Label 
{ 
} 

Dans votre projet Windows téléphone pour créer un Custom Renderer comme suit et utiliser la propriété TextBlock.TextDecorations pour définir le soulignement. Le libellé est rendu TextBlock dans Windows.

échantillon (non testé ):

[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; 
      } 
     } 
    } 
} 

Si vous utilisez le téléphone Windows Consultez cet exemple - How to format texts of TextBlock using xaml in Windows Phone.

Pour WinRT vous pouvez l'utiliser - TextBlock underline in WinRT.

Dans SilverLight WinPhone (l'ancien modèle non pris en charge), vous pouvez également utiliser la marge pour obtenir ce dont vous avez besoin, similaire à How to make an underlined input text field in Windows Phone?.

+0

Je ne trouve pas cette propriété! J'ai cette erreur: Erreur \t CS1061 \t 'TextBlock' ne contient pas de définition pour 'TextDecorations' et aucune méthode d'extension 'TextDecorations' acceptant un premier argument de type 'TextBlock' n'a été trouvée (il manque une directive using ou un référence d'assemblage?) –

+0

Quel est le type que vous obtenez pour 'Control' dans le projet de téléphone Windows? –

+0

'TextBlock', vous pouvez le voir dans mon message d'erreur –

0

Créer une étiquette dans renderer votre projet WinPhone:

approche
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); 
    } 
    } 
}