Introduction▲
En Silverlight 3 il est désormais possible de personnaliser le curseur (la barre noire horizontale) qui apparait dans les TextBox lorsque celles-ci ont le focus. Pour cela, la propriété CaretBrush de type Brush a été ajoutée à la classe TextBox.

L'application de démonstration est disponible en ligne ici.
I. Utilisation d'une couleur▲
La personnalisation la plus simple consiste à changer la couleur du curseur en spécifiant un SolidColorBrush :
<TextBox Background="Red" CaretBrush="Blue"/>ou bien
<TextBox>
<TextBox.CaretBrush>
<SolidColorBrush Color="Blue"/>
</TextBox.CaretBrush>
</TextBox>
Le résultat obtenu :

II. Utilisation d'une image▲
Il est aussi possible d'utiliser une image. Par exemple, l'image ci-dessous permet de représenter des pointillés :

Il suffit ensuite d'indiquer un ImageBrush pour la propriété CaretBrush :
<TextBox>
<TextBox.CaretBrush>
<ImageBrush ImageSource="Medias/dot.png" Stretch="Fill"/>
</TextBox.CaretBrush>
</TextBox>
Nous obtenons ainsi un curseur en pointillés :

III. Utilisation d'un gradient▲
Vous pouvez aussi utiliser un gradient :
<TextBox FontSize="50" Width="300" Height="80">
<TextBox.CaretBrush>
<LinearGradientBrush MappingMode="RelativeToBoundingBox" StartPoint="0,0" EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStop Color="Red" Offset="0" />
<GradientStop Color="Orange" Offset="0.167" />
<GradientStop Color="Yellow" Offset="0.333" />
<GradientStop Color="Green" Offset="0.5"/>
<GradientStop Color="Blue" Offset="0.667" />
<GradientStop Color="Indigo" Offset="0.833" />
<GradientStop Color="Violet" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</TextBox.CaretBrush>
</TextBox>
Et obtenir un curseur aux couleurs de l'arc-en-ciel :

IV. Utilisation d'un Binding▲
La propriété CaretBrush peut également être « bindée » pour changer sa couleur dynamiquement.
Pour illustrer ce principe nous pouvons par exemple utiliser une ComboBox contenant les noms de deux couleurs et une TexBox dont nous « bindons » directement (grâce au Binding élément à élément de Silverlight 3) la propriété CaretBrush à l'élément sélectionné de la ComboBox en utilisant le converter :
<ComboBox x:Name="ComboCouleurs" >
<System:String>Rouge</System:String>
<System:String>Vert</System:String>
</ComboBox>
<TextBox CaretBrush="{Binding SelectedItem,
ElementName=ComboCouleurs,
Converter={StaticResource stringToColorConverter}}" />
Nous pouvons maintenant changer la couleur du curseur via la ComboBox :


Le converter est volontairement très simpliste :
public class StringToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
string colorString = value.ToString();
if (!string.IsNullOrEmpty(colorString))
{
switch (colorString)
{
case "Rouge" :
return new SolidColorBrush(Colors.Red);
case "Vert":
return new SolidColorBrush(Colors.Green);
default:
return new SolidColorBrush(Colors.Black);
}
}
}
return new SolidColorBrush(Colors.Black);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Pour l'utiliser il faut bien sûr ne pas oublier de le déclarer dans les ressources de la page :
<UserControl.Resources>
<local:StringToColorConverter x:Key="stringToColorConverter"/>
</UserControl.Resources>Sources▲
Téléchargez les sources de la solution donnée en exemple.
Remerciements▲
J'adresse ici tous mes remerciements à l'équipe de rédaction de "developpez.com" pour le temps qu'ils ont bien voulu passer à la correction et à l'amélioration de cet article.
Contact▲
Si vous constatez une erreur dans le tutorial, dans les sources, dans la programmation ou pour toutes informations, n'hésitez pas à me contacter par le forum.





