Par exemple, Facebook a une "Recherche" astuce du texte dans la zone de texte de Recherche lorsque la zone de texte est vide.
Comment réaliser cela avec WPF zones de texte??
Par exemple, Facebook a une "Recherche" astuce du texte dans la zone de texte de Recherche lorsque la zone de texte est vide.
Comment réaliser cela avec WPF zones de texte??
Vous pouvez accomplir beaucoup plus facilement avec un VisualBrush
et certains déclencheurs en Style
:
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Style.Resources>
<VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
<VisualBrush.Visual>
<Label Content="Search" Foreground="LightGray" />
</VisualBrush.Visual>
</VisualBrush>
</Style.Resources>
<Style.Triggers>
<Trigger Property="Text" Value="{x:Static sys:String.Empty}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter Property="Background" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
Pour augmenter la ré-utilisabilité de ce Style
, vous pouvez également créer un ensemble de propriétés attachées à contrôle le réel de repère bannière de texte, la couleur, l'orientation, etc.
Le faire dans le code-behind en définissant la couleur du texte, initialement, de gris et ajouter des gestionnaires d'événements pour gagner et perdre le focus du clavier.
TextBox tb = new TextBox();
tb.Foreground = Brushes.Gray;
tb.Text = "Text";
tb.GotKeyboardFocus += new KeyboardFocusChangedEventHandler(tb_GotKeyboardFocus);
tb.LostKeyboardFocus += new KeyboardFocusChangedEventHandler(tb_LostKeyboardFocus);
Ensuite, les gestionnaires d'événements:
private void tb_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
if(sender is TextBox)
{
//If nothing has been entered yet.
if(((TextBox)sender).Foreground == Brushes.Gray)
{
((TextBox)sender).Text = "";
((TextBox)sender).Foreground = Brushes.Black;
}
}
}
private void tb_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
//Make sure sender is the correct Control.
if(sender is TextBox)
{
//If nothing was entered, reset default text.
if(((TextBox)sender).Text.Trim().Equals(""))
{
((TextBox)sender).Foreground = Brushes.Gray;
((TextBox)sender).Text = "Text";
}
}
}
vous avez créer un contrôle personnalisé par hériter de la zone de texte. Ci-dessous le lien est un excellent exemple sur la zone de texte recherche de l'échantillon. Jetez un oeil à cette
http://davidowens.wordpress.com/2009/02/18/wpf-search-text-box/
J'ai utilisé le got et le foyer perdu événements:
Private Sub txtSearchBox_GotFocus(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles txtSearchBox.GotFocus
If txtSearchBox.Text = "Search" Then
txtSearchBox.Text = ""
Else
End If
End Sub
Private Sub txtSearchBox_LostFocus(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles txtSearchBox.LostFocus
If txtSearchBox.Text = "" Then
txtSearchBox.Text = "Search"
Else
End If
End Sub
Il fonctionne bien, mais le texte est en gris encore. Les besoins de nettoyage. J'ai été en utilisant VB.NET
- Je y arriver avec un VisualBrush
et certains déclencheurs en Style
proposé par :sellmeadog
.
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Style.Resources>
<VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
<VisualBrush.Visual>
<Label Content="Search" Foreground="LightGray" />
</VisualBrush.Visual>
</VisualBrush>
</Style.Resources>
<Style.Triggers>
<Trigger Property="Text" Value="{x:Static sys:String.Empty}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter Property="Background" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
@sellmeadog :Application en cours d'exécution, bt Conception de pas de chargement...l'Erreur suivante: Ambigu type de référence. Un type nommé "StaticExtension" se produit dans au moins deux espaces de noms, 'MME Internes.Les métadonnées.ExposedTypes.Xaml et du Système.De Windows.Balisage'. Envisager l'ajustement de l'assemblée XmlnsDefinition attributs. m 'aide .net 3.5
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.