Xamarin.Forms Barre de recherche
Il Xamarin.FormsSearchBar
s’agit d’un contrôle d’entrée utilisateur utilisé pour lancer une recherche. Le contrôle SearchBar
prend en charge le texte des espaces réservés, l’entrée de la requête, l’exécution de la recherche et l’annulation. La capture d’écran suivante montre une SearchBar
requête avec les résultats affichés dans un ListView
:
La classe SearchBar
définit les propriétés suivantes :
CancelButtonColor
est unColor
qui définit la couleur du bouton d’annulation.CharacterSpacing
, de typedouble
, est l’espacement entre les caractères du texteSearchBar
.FontAttributes
est uneFontAttributes
valeur d’énumération qui détermine si laSearchBar
police est en gras, italique ou non.FontFamily
est unstring
qui détermine la famille de polices utilisée par leSearchBar
.FontSize
peut être uneNamedSize
valeur d’énumération ou unedouble
valeur qui représente des tailles de police spécifiques sur plusieurs plateformes.HorizontalTextAlignment
est une valeur d’énumérationTextAlignment
qui définit l’alignement horizontal du texte de la requête.VerticalTextAlignment
est une valeur d’énumérationTextAlignment
qui définit l’alignement vertical du texte de la requête.Placeholder
est unstring
élément qui définit le texte de l’espace réservé, tel que « Rechercher... ».PlaceholderColor
est unColor
qui définit la couleur du texte de l’espace réservé.SearchCommand
est uneICommand
qui permet de lier des actions utilisateur, telles que des appuis avec le doigt ou des clics, aux commandes définies sur un viewmodel.SearchCommandParameter
est unobject
qui spécifie le paramètre qui doit être transmis àSearchCommand
.Text
string
contient le texte de la requête dans leSearchBar
.TextColor
est unColor
qui définit la couleur du texte de la requête.TextTransform
est uneTextTransform
valeur qui détermine la casse duSearchBar
texte.
Ces propriétés sont sauvegardées par BindableProperty
des objets, ce qui signifie que les SearchBar
objets peuvent être personnalisés et être la cible des liaisons de données. La spécification des propriétés de police sur le site SearchBar
est cohérente avec la personnalisation du texte sur d’autres Xamarin.Forms contrôles de texte. Pour plus d’informations, consultez Polices dans Xamarin.Forms.
Créer une SearchBar
Vous pouvez instancier un SearchBar
en XAML. Sa propriété facultative Placeholder
peut être définie pour définir le texte d’indicateur dans la zone d’entrée de requête. La valeur par défaut du Placeholder
fichier est une chaîne vide, donc aucun espace réservé n’apparaît s’il n’est pas défini. L’exemple suivant montre comment instancier un SearchBar
en XAML avec le jeu de propriétés Placeholder
facultatif :
<SearchBar Placeholder="Search items..." />
Vous pouvez également créer un SearchBar
en code :
SearchBar searchBar = new SearchBar{ Placeholder = "Search items..." };
Propriétés d’apparence de la barre de recherche
Le SearchBar
contrôle définit de nombreuses propriétés qui personnalisent l’apparence du contrôle. L’exemple suivant montre comment instancier un SearchBar
code XAML avec plusieurs propriétés spécifiées :
<SearchBar Placeholder="Search items..."
CancelButtonColor="Orange"
PlaceholderColor="Orange"
TextColor="Orange"
TextTransform="Lowercase"
HorizontalTextAlignment="Center"
FontSize="Medium"
FontAttributes="Italic" />
Ces propriétés peuvent également être spécifiées lors de la création d’un SearchBar
objet dans le code :
SearchBar searchBar = new SearchBar
{
Placeholder = "Search items...",
PlaceholderColor = Color.Orange,
TextColor = Color.Orange,
TextTransform = TextTransform.Lowercase,
HorizontalTextAlignment = TextAlignment.Center,
FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(SearchBar)),
FontAttributes = FontAttributes.Italic
};
La capture d’écran suivante montre le contrôle obtenu SearchBar
:
Remarque
Sur iOS, la SearchBarRenderer
classe contient une méthode substituable UpdateCancelButton
. Cette méthode contrôle quand le bouton Annuler s’affiche et peut être substitué dans un renderer personnalisé. Pour plus d’informations sur les renderers personnalisés, consultez Xamarin.Forms Renderers personnalisés.
Effectuer une recherche avec des gestionnaires d’événements
Une recherche peut être exécutée à l’aide du contrôle SearchBar
en attachant un gestionnaire d’événements à l’un des événements suivants :
SearchButtonPressed
est appelé lorsque l’utilisateur clique sur le bouton de recherche ou appuie sur la touche Entrée.TextChanged
est appelé chaque fois que le texte de la zone de requête est modifié.
L’exemple suivant montre un gestionnaire d’événements attaché à l’événement TextChanged
en XAML et utilise un ListView
pour afficher les résultats de la recherche :
<SearchBar TextChanged="OnTextChanged" />
<ListView x:Name="searchResults" >
Un gestionnaire d’événements peut également être attaché à un SearchBar
gestionnaire d’événements créé dans le code :
SearchBar searchBar = new SearchBar {/*...*/};
searchBar.TextChanged += OnTextChanged;
Le TextChanged
gestionnaire d’événements dans le fichier code-behind est le même, que celui-ci SearchBar
soit créé via XAML ou code :
void OnTextChanged(object sender, EventArgs e)
{
SearchBar searchBar = (SearchBar)sender;
searchResults.ItemsSource = DataService.GetSearchResults(searchBar.Text);
}
L’exemple précédent implique l’existence d’une DataService
classe avec une GetSearchResults
méthode capable de retourner des éléments qui correspondent à une requête. La valeur de propriété Text
du contrôle SearchBar
est transmise à la méthode GetSearchResults
et le résultat est utilisé pour mettre à jour la propriété ItemsSource
du contrôle ListView
. L’effet global est que les résultats de la recherche sont affichés dans le ListView
contrôle.
L’exemple d’application fournit une DataService
implémentation de classe qui peut être utilisée pour tester la fonctionnalité de recherche.
Effectuer une recherche à l’aide d’un viewmodel
Une recherche peut être exécutée sans gestionnaires d’événements en liant les SearchCommand
propriétés aux SearchCommandParameter
ICommand
implémentations. L’exemple de projet illustre ces implémentations à l’aide du modèle Model-View-ViewModel (MVVM). Pour plus d’informations sur les liaisons de données avec MVVM, consultez Liaisons de données avec MVVM.
Le viewmodel dans l’exemple d’application contient le code suivant :
public class SearchViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public ICommand PerformSearch => new Command<string>((string query) =>
{
SearchResults = DataService.GetSearchResults(query);
});
private List<string> searchResults = DataService.Fruits;
public List<string> SearchResults
{
get
{
return searchResults;
}
set
{
searchResults = value;
NotifyPropertyChanged();
}
}
}
Remarque
Le viewmodel suppose l’existence d’une classe DataService
capable d’effectuer des recherches. La DataService
classe, y compris les exemples de données, est disponible dans l’exemple d’application.
Le code XAML suivant montre comment lier un SearchBar
à l’exemple viewmodel, avec un ListView
contrôle affichant les résultats de la recherche :
<ContentPage ...>
<ContentPage.BindingContext>
<viewmodels:SearchViewModel />
</ContentPage.BindingContext>
<StackLayout ...>
<SearchBar x:Name="searchBar"
...
SearchCommand="{Binding PerformSearch}"
SearchCommandParameter="{Binding Text, Source={x:Reference searchBar}}"/>
<ListView x:Name="searchResults"
...
ItemsSource="{Binding SearchResults}" />
</StackLayout>
</ContentPage>
Cet exemple montre comment définir l’instance BindingContext
de la SearchViewModel
classe. Il lie la SearchCommand
propriété à la ICommand
PerformSearch
propriété dans le viewmodel et lie la SearchBar
Text
propriété à la SearchCommandParameter
propriété. La ListView.ItemsSource
propriété est liée à la SearchResults
propriété du viewmodel.
Pour plus d’informations sur l’interface et les ICommand
liaisons, consultez Xamarin.Forms la liaison de données et l’interface ICommand.