2014-07-16 3 views
6

Sto cercando di aggiungere un nome a un'etichetta in modo posso trovarlo utilizzando il metodo di Content.FindByName <Come faccio a impostare il nome di un'etichetta in Xamarin Forms

per quanto posso>() dire la classe Xamarin.Forms.Label() non dispone di una proprietà Name

Qui è la mia pagina di classe

public class HelloWordCodePage : ContentPage 
{ 
    public Label HelloWorldLabel; 

    public HelloWordCodePage() 
    { 
     HelloWorldLabel = new Label{Text = "Hello World", }; 
     ConstructView(); 
    } 

    public void ConstructView() 
    { 
     Content = new StackLayout 
     { 
      Children = 
      { 
       HelloWorldLabel 
      } 
     }; 
    } 
} 
+1

Se lo stai facendo in codice, perché non mantenere solo il riferimento in qualche modo? –

risposta

1

credo che il nome è il solo scopo di essere utilizzato durante la creazione del elemento in XAML. Se guardi l'ereditarietà troverai Element nella parte inferiore e implementa esplicitamente INameScope. Non si può lanciare Label a INameScope come quella è un'interfaccia interna:

namespace Xamarin.Forms 
{ 
    internal interface INameScope 
    { 
     object FindByName(string name); 

     void RegisterName(string name, object scopedElement); 

     void UnregisterName(string name); 
    } 
} 
0

Il nome viene assegnato in fase di elaborazione Render. Non è necessario conoscere il nome visualizzato in questo momento mentre si sta lavorando su una piattaforma multipiattaforma ContentPage.

C'è un GUID, ma come dici tu non c'è ID. A mio parere, non vorresti mai ottenere un ID specifico per piattaforma per il controllo generato a questo livello elevato di design della pagina. Se lo fai, forse dovresti invece creare uno specifico per la piattaforma PageRenderer?

Quando si inizia a scrivere CustomRenderers e si creano controlli specifici della piattaforma è possibile quindi assegnare gli ID se si desidera qualsiasi implementazione specifica della piattaforma di controllo personalizzata desiderata.

Ricordate sulla corrente ContentPage - si dispone di un riferimento oggetto classe con ambito già per l'etichetta di nome HelloWorldLabel, che è possibile utilizzare per cambiare il suo aspetto, ecc sulla pagina quando in esecuzione.

5

Se si definisce l'etichetta in XAML, è possibile utilizzare questo syntex:

<Label x:Name="YourLableName" Text="A simple Label" /> 

E poi accedervi nel codice dietro come questo

YourLableName.Text = "bla bla" 

Tuttavia, se non si utilizza Xaml e tutta la definizione della tua pagina si trova nel codice sottostante, dovresti mantenere un riferimento a tale etichetta per accedervi invece di trovarla usando Content.FindByName<>() come @Sten Petrov ha commentato

0

StyleId

Utilizzare la proprietà StyleId per identificare i singoli elementi nell'applicazione per l'identificazione nel test dell'interfaccia utente e nei motori dei temi.