2016-08-08 46 views
2

Ich bin neu in xamarin.formsxamarin.forms - eindeutig zu identifizieren Kontrollen in Listview in XAML

ich eine Listenansicht, die von Back-End-C# -Code gefüllt ist.

Ich habe ein Label und ein Bild definiert. Und ich habe x: Name Eigenschaft in XAML gegeben.

Nun, meine Frage ist, ich möchte diese beiden Etiketten im Back-End-C# -Code zugreifen. Beide Labels sind jedoch nicht zugänglich, da sie sich in der Listenansicht befinden. Wenn ich ein Label außerhalb von Listview setze, kann ich darauf im Code zugreifen.

Bitte vermeiden Sie Syntaxfehler. Mein Code funktioniert gut. Ich möchte auf diese Elemente zugreifen, damit ich den Stil für Telefon und Tablet ändern kann.

Meine XAML-Code:

// ... 
<ListView x:Name="DentistList"> 
    <Listview.ItemTemplate> 
     <DataTemplate> 
     <ViewCell> 
      <Image Source="{Binding ImagePath}" x:Name="DoctorImage"/> 
      <Label Text="{Binding Name}" x:Name="DoctorName" /> 
     </ViewCell> 
     </DataTemplate> 
    </Listview.ItemTemplate> 
</ListView> 

Mein C# -Code:

...... 
DentistList.ItemSource = new List<Doctor> 
{ 
     // List of items defined here like... 
     Name = "ABC", 
     ImagePath = "img1.jpg" 

     // Etc... 
}; 

Nun Unterhalb dieser Liste, ich möchte Stil ändern (wie Schriftgröße etc ...) von Etikett und Bild . Aber ich kann nicht auf sie zugreifen.

Ich versuchte, mit FindByName() -Methode auf sie zuzugreifen, konnte das aber nicht tun.

Also, kann jemand bitte antworten?

Vielen Dank im Voraus.

+1

Sie können Steuerelemente in einer Vorlage nicht anhand des Namens referenzieren, da für jedes Steuerelement mehrere Instanzen vorhanden sind, eine pro Element in der Liste. Wenn Sie sie für Tablets anpassen möchten, verwenden Sie OnIdiom in Ihrem XAML oder verwenden Sie Styles. – Jason

+1

Vielen Dank für den Kommentar @Jason, aber wie kann ich Schriftgröße und Textfarbe mit Onidiom ändern, weil ich keine Lösung finden konnte, um es zu implementieren. –

Antwort

1

Von Jasons Kommentar, können Sie die Label.FontSize und Label.TextColorOnIdiom wie so verwenden ändern:

<Label Text="{Binding Name}" x:Name="DoctorName"> 
    <Label.TextColor> 
     <OnIdiom x:TypeArguments="Color" 
       Phone="Yellow" 
       Tablet="Blue"/> 
    </Label.TextColor> 

    <Label.FontSize> 
     <OnIdiom x:TypeArguments="NamedSize" 
       Phone="Small" 
       Tablet="Large"/> 
    </Label.FontSize> 
</Label> 

* Edit: Beispiel regelmäßige ganze Zahl mit:

<Label.FontSize> 
    <OnIdiom x:TypeArguments="x:Double" 
      Phone="20" 
      Tablet="30"/> 
</Label.FontSize> 

* Edit # 2: Wenn Sie plane, deine Label.FontSize und Label.TextColor auf mehreren Seiten zu verwenden, würde ich vorschlagen, die Werte deiner App.xaml hinzuzufügen und sie dann von deinerin Verbindung zu bringens (man könnte auch nur den Wert der ResourceDictionary s ContentPage‘hinzufügen, wenn Sie die Werte mehrmals verwenden, aber nur auf einer einzigen Seite):

App.xaml:

<Application xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="MyApp.App"> 
    <Application.Resources> 
    <ResourceDictionary> 

     <Color x:Key="MyTextColor"> 
     <Color.Accent> 
      <OnIdiom x:TypeArguments="Color" 
        Phone="Yellow" 
        Tablet="Blue"/> 
     </Color.Accent> 
     </Color> 

     <x:Double x:Key="MyFontSize"> 
     <OnIdiom x:TypeArguments="x:Double" 
       Phone="20" 
       Tablet="30"/> 
     </x:Double> 

    </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Jetzt in Ihrem ContentPage s:

<Label x:Name="DoctorName" 
     Text="{Binding Name}" 
     TextColor="{StaticResource MyTextColor}" 
     FontSize="{StaticResource MyFontSize}"/> 

Wenn Sie NamedSize verwenden, anstatt müssen Sie Konverter verwenden, die ich auf den Xamarin Foren gesehen haben. Lass es mich wissen, wenn du es nicht finden kannst und ich versuche mich umzusehen.

+1

Thans für den Kommentar @ hvaughan3. Ich werde es versuchen..:) scheint nützlich :) –

+1

Kann ich statischen Wert anstelle von klein und groß verwenden? –

+0

@Sweets Wenn Sie sich auf reguläre ganzzahlige Werte beziehen, können Sie natürlich. Siehe Bearbeiten. – hvaughan3