2017-07-02 27 views
0

Derzeit ich folgende XAML eine Listenansicht erstellt haben mitXamarin Forms Zellmanipulation RTL

<ListView x:Name="_lstMenu" VerticalOptions="FillAndExpand" BackgroundColor="Transparent"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <ImageCell Text="{Binding Title}" ImageSource="{Binding IconSource}" /> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
</ListView> 

Was ich versuche zu tun ist, wenn die Sprache auf Arabisch geschaltet wird, um die gesamte Benutzererfahrung rechts- machen nach links orientiert. Um das zu tun, verwende ich die RotateYTo (180) -Methode.

protected override void rotateElementsY(int rotationY) 
{ 
    base.rotateElementsY(rotationY); 

    foreach (View sub in subviews()) 
    { 
     sub.RotateYTo(rotationY); 
    } 
} 

private View[] subviews() 
{ 
    View[] _subs = new View[] { 
     imgUser, lblGreetings, lblUserName, lstMenu, stkBottom}; 
    return _subs; 
} 

Es funktioniert soweit gut, mit Ausnahme der Imagecell als ich nur in der Lage bin es in links-nach-rechts-Richtung nur anzuzeigen, und nicht in der Lage jeden der Zelle des Kindes zu drehen (Label, Bild) .

PS: Ich habe auch versucht, den arabischen Text der Zelle in umgekehrter Reihenfolge nach dem Spiegeln der Listenansicht zu schreiben, aber es sieht immer noch nicht angemessen aus.

Antwort

1

Dank ganchito55 für mich zu der Antwort zu inspirieren, die ich brauchte. Ich habe seine Idee, RTL zu machen, ziemlich genutzt, aber mit der Fähigkeit, bei Bedarf auch auf LTR umzusteigen.

<ListView x:Name="_lstMenu" VerticalOptions="FillAndExpand" BackgroundColor="Transparent"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="2*"/> 
          <ColumnDefinition Width="6*"/> 
          <ColumnDefinition Width="2*"/> 
         </Grid.ColumnDefinitions> 
         <Image Source="{Binding IconSource}" IsVisible="{Binding isEnglish}"/> 
         <Label Grid.Column="1" Text="{Binding Title}" VerticalTextAlignment="Center" HorizontalTextAlignment="{Binding alignment}"/> 
         <Image Grid.Column="2" Source="{Binding IconSource}" IsVisible="{Binding isArabic}"/> 
        </Grid> 
       </ViewCell> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
</ListView> 

Wie man sehen kann ich ein anderes Bild der Elementvorlage hinzugefügt haben, und Objekte, die dem genannten Punkt Objekt zu entscheiden, welches Bild und Ausrichtung zu verwenden, um jedes Mal angezeigt werden soll.

1

Ich denke, dass die beste Lösung für RTL Sprachen ist, dass Sie eine benutzerdefinierte Zelle erstellen, wenn Sie das Bild auf der rechten Seite und dann das Etikett mit der rechten Ausrichtung, zum Beispiel:

<ListView 
    x:Name="_lstMenu" 
    BackgroundColor="Transparent" 
    VerticalOptions="FillAndExpand"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="4*" /> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
        <Label 
         HorizontalTextAlignment="End" 
         Text="{Binding Title}" 
         VerticalTextAlignment="Center" /> 
        <Image Grid.Column="1" Source="{Binding Image}" /> 
       </Grid> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Ich hoffe, dies kann dir helfen.