Xamarin.Forms Searchbar
est Xamarin.FormsSearchBar
un contrôle d’entrée utilisateur utilisé pour lancer une recherche. Le contrôle prend en charge le SearchBar
texte d’espace réservé, l’entrée de 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 SearchBar
classe définit les propriétés suivantes :
CancelButtonColor
est unColor
qui définit la couleur du bouton Annuler.CharacterSpacing
, de typedouble
, est l’espacement entre les caractères duSearchBar
texte.FontAttributes
est uneFontAttributes
valeur d’énumération qui détermine si laSearchBar
police est gras, italique ou non.FontFamily
est unstring
qui détermine la famille de polices utilisée par .SearchBar
FontSize
peut être uneNamedSize
valeur d’énumération ou unedouble
valeur qui représente des tailles de police spécifiques sur les plateformes.HorizontalTextAlignment
est uneTextAlignment
valeur d’énumération qui définit l’alignement horizontal du texte de la requête.VerticalTextAlignment
est uneTextAlignment
valeur d’énumération qui définit l’alignement vertical du texte de la requête.Placeholder
est unstring
qui définit le texte de l’espace réservé, par exemple « Rechercher... ».PlaceholderColor
est unColor
qui définit la couleur du texte de l’espace réservé.SearchCommand
est un qui permet deICommand
lier des actions utilisateur, telles que des appuis ou des clics au doigt, à des commandes définies sur un mode d’affichage.SearchCommandParameter
est unobject
qui spécifie le paramètre qui doit être passé auSearchCommand
.Text
est unstring
contenant le texte de la requête dans .SearchBar
TextColor
est unColor
qui définit la couleur du texte de requête.TextTransform
est uneTextTransform
valeur qui détermine la casse duSearchBar
texte.
Ces propriétés sont soutenues par BindableProperty
des objets, ce qui signifie que le SearchBar
peut être personnalisé et être la cible des liaisons de données. La spécification des propriétés de police sur le est cohérente avec la SearchBar
personnalisation du texte sur d’autres Xamarin.Forms contrôles de texte. Pour plus d’informations, consultez Polices dans Xamarin.Forms.
Créer une barre de recherche
Un SearchBar
peut être instancié 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 de est Placeholder
une chaîne vide. Aucun espace réservé n’apparaît donc s’il n’est pas défini. L’exemple suivant montre comment instancier un SearchBar
en XAML avec l’ensemble de propriétés facultatives Placeholder
:
<SearchBar Placeholder="Search items..." />
Un SearchBar
peut également être créé dans le 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
en 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 résultant SearchBar
:
Notes
Sur iOS, la SearchBarRenderer
classe contient une méthode substituable UpdateCancelButton
. Cette méthode contrôle le moment où le bouton Annuler apparaît et peut être remplacée dans un renderer personnalisé. Pour plus d’informations sur les convertisseurs 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 SearchBar
contrôle 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
objet 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 le SearchBar
soit créé via XAML ou le 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 SearchBar
valeur de propriété du Text
contrôle est passée à la GetSearchResults
méthode et le résultat est utilisé pour mettre à jour la ListView
propriété du ItemsSource
contrôle. 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 et SearchCommandParameter
à ICommand
des implémentations. L’exemple de projet illustre ces implémentations à l’aide du modèle Model-ViewModel (MVVM). Pour plus d’informations sur les liaisons de données avec MVVM, consultez Liaisons de données avec MVVM.
Le modèle de vue 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();
}
}
}
Notes
Le viewmodel suppose l’existence d’une DataService
classe 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 le BindingContext
comme un instance de la SearchViewModel
classe . Il lie la SearchCommand
propriété à dansICommand
PerformSearch
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 ICommand
et les liaisons, consultez Xamarin.Forms Liaison de données et interface ICommand.