none
CUtilisation de IValueConverter pour changer la couleur de fond d'un TextBox RRS feed

  • Question

  • Bonjour, voici un code qui doit changer la couleur d'un TextBox en fonction de son contenu.

    Si vide = transparent

    Si contient du texte = Jaune

    mais ce code ne produit l'effet escompté, le TextBox même vide reste transparent.

    Class IValueConverter :

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Data;
    using System.Windows.Media;
    
    namespace Time_Management.Library
    {
        class BackGroundConverter : IValueConverter
        {
            public Brush TransparentBrush { get; set; }
            public Brush YellowBrush { get; set; }
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                
                if (value==null)
                {
                    return YellowBrush;
                }
                else
                {
                    return TransparentBrush;
                }
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    }
    

    Implémentation Xaml :

    ...
     xmlns:loc="clr-namespace:Time_Management.Library" 
    
    <Window.Resources>
    
            <loc:BackGroundConverter x:Key="BackGroundConverter"
                                     TransparentBrush="Transparent"
                                     YellowBrush="Yellow"/>
     </Window.Resources>

    <TextBox x:Name="New_NameTxtBox" Grid.Column="1" Grid.Row="2"
                     Width="200"
                     Background="{Binding Path=Text,UpdateSourceTrigger=PropertyChanged,
                Converter={StaticResource BackGroundConverter}}"/>

    Merci de votre aide


    JF Collombet ® CreateSpecificCulture

    jeudi 10 janvier 2019 05:52

Toutes les réponses

  • Bonjour,

    Je pense que vous devriez indiquer RelativeSource dans le binding appliqué à la propriété Background de votre textbox.


    <TextBox x:Name="New_NameTxtBox" Grid.Column="1" Grid.Row="2" Width="200"
                     Background="{Binding Path=Text, RelativeSource={RelativeSource Self}, Converter={StaticResource BackGroundConverter}}"/>
    Vérifiez aussi si la valeur transmisse au converter n'est pas Null ou vide via String.IsNullOrWhiteSpace.
    mercredi 16 janvier 2019 05:26