2016-02-01 3 views
2

Je voudrais savoir s'il est possible de créer une condition sur un bloc de texte dans un ListView. J'explique:UWP Couleur Avant-propos ListView Condition

J'ai un modèle qui contient des données et il y a un "montant" dans ce modèle. Si le montant est négatif, je voudrais mettre le premier plan en rouge, et s'il est positif, je voudrais mettre le premier plan en vert.

<TextBlock RelativePanel.AlignRightWithPanel="True" 
           Foreground="Red" 
           FontWeight="Bold"> 
         <Run Text="{Binding Amount}" /> 
         <Run Text="€" /> 
</TextBlock> 

Ceci est le bloc de texte, il est dans un ListView.ItemTemplate.

Cordialement,

Anthony

Répondre

2

Vous devez utiliser un convertisseur. Créez une classe (par exemple AmountColorConverter) dérivée de IValueConverter.

public object Convert(object value, ...) 
{ 
    var val = (double)value; 
    return val >= 0 
     ? Colors.Green 
     : Colors.Red; 
} 

Une fois mis en œuvre, créer une instance du convertisseur en XAML et référence dans la liaison:

<converter:AmountColorConverter x:Key="AmountColorConverter"/> 
<TextBlock RelativePanel.AlignRightWithPanel="True" 
      Foreground="{Binding Amount, Converter={StaticResource AmountColorConverter}}" 
      FontWeight="Bold"> 
    <Run Text="{Binding Amount}" /> 
    <Run Text="€" /> 
</TextBlock> 
+0

Merci beaucoup pour votre réponse, je l'ai fait, mais ne change pas la couleur de l'avant-plan. J'essaie en debug et la couleur retournée est ok, mais n'a pas changé la couleur ... donc bizarre –

+0

@AnthonyNfr The ['Run'] (https://msdn.microsoft.com/fr-fr/library/windows /apps/windows.ui.xaml.documents.run) class a également une propriété 'Foreground'. Peut-être que la valeur appliquée par le convertisseur à 'TextBlock' est écrasée par la valeur de l'instance' Run'. – Herdo

0

Je l'ai déjà essayé. Il mon code XAML:

<TextBlock HorizontalAlignment="Right" 
      Grid.Column="2" 
      Grid.Row="0" 
      Foreground="{Binding Amount, Mode=TwoWay, Converter={StaticResource ForegroundColorAmount}}" 
      FontWeight="Medium"> 
       <Run Text="{Binding Amount}" Foreground="{Binding Amount, Mode=TwoWay, Converter={StaticResource ForegroundColorAmount}}" /> 
       <Run Text="€" /> 

Et bien sûr, j'ai utilisé l'aide de:

xmlns:converters="using:Sample.Converters" 

Et voici ma classe convertisseur:

public class ForegroundColorAmount : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var val = (double)value; 
     if (val >= 0) 
     { 
      return Colors.Green; 
     } 
     else 
     { 
      return Colors.Red; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

remercient.

Anthony