Xamarin.Forms SearchBar
Xamarin.FormsSearchBar
è un controllo di input utente utilizzato per avviare una ricerca. Il SearchBar
controllo supporta testo segnaposto, input di query, esecuzione della ricerca e annullamento. Lo screenshot seguente mostra una SearchBar
query con i risultati visualizzati in :ListView
La SearchBar
classe definisce le proprietà seguenti:
CancelButtonColor
è unColor
oggetto che definisce il colore del pulsante Annulla.CharacterSpacing
, di tipodouble
, è la spaziatura tra i caratteri delSearchBar
testo.FontAttributes
è unFontAttributes
valore di enumerazione che determina se ilSearchBar
tipo di carattere è grassetto, corsivo o nessuno dei due.FontFamily
è un oggettostring
che determina la famiglia di caratteri utilizzata daSearchBar
.FontSize
può essere unNamedSize
valore di enumerazione o undouble
valore che rappresenta dimensioni specifiche del carattere tra le piattaforme.HorizontalTextAlignment
è unTextAlignment
valore di enumerazione che definisce l'allineamento orizzontale del testo della query.VerticalTextAlignment
è unTextAlignment
valore di enumerazione che definisce l'allineamento verticale del testo della query.Placeholder
è unstring
oggetto che definisce il testo segnaposto, ad esempio "Search...".PlaceholderColor
è unColor
oggetto che definisce il colore del testo segnaposto.SearchCommand
è un oggettoICommand
che consente l'associazione di azioni utente, ad esempio tocco di dito o clic, ai comandi definiti in un modello di visualizzazione.SearchCommandParameter
è unobject
oggetto che specifica il parametro che deve essere passato aSearchCommand
.Text
è un oggettostring
contenente il testo della query nell'oggettoSearchBar
.TextColor
è unColor
oggetto che definisce il colore del testo della query.TextTransform
è unTextTransform
valore che determina la combinazione di maiuscole e minuscole delSearchBar
testo.
Queste proprietà sono supportate da BindableProperty
oggetti, il che significa che SearchBar
è possibile personalizzare e essere la destinazione dei data binding. Specificare le proprietà del tipo di carattere in SearchBar
è coerente con la personalizzazione del testo in altri Xamarin.Forms controlli Testo. Per altre informazioni, vedere Tipi di carattere in Xamarin.Forms.
Creare un controllo SearchBar
È SearchBar
possibile creare un'istanza di un oggetto in XAML. La proprietà facoltativa può essere impostata Placeholder
per definire il testo dell'hint nella casella di input della query. Il valore predefinito per è Placeholder
una stringa vuota, quindi non verrà visualizzato alcun segnaposto se non è impostato. L'esempio seguente illustra come creare un'istanza di in SearchBar
XAML con il set di proprietà facoltativo Placeholder
:
<SearchBar Placeholder="Search items..." />
È anche possibile creare un oggetto SearchBar
nel codice:
SearchBar searchBar = new SearchBar{ Placeholder = "Search items..." };
Proprietà dell'aspetto searchBar
Il SearchBar
controllo definisce molte proprietà che personalizzano l'aspetto del controllo. L'esempio seguente illustra come creare un'istanza di in SearchBar
XAML con più proprietà specificate:
<SearchBar Placeholder="Search items..."
CancelButtonColor="Orange"
PlaceholderColor="Orange"
TextColor="Orange"
TextTransform="Lowercase"
HorizontalTextAlignment="Center"
FontSize="Medium"
FontAttributes="Italic" />
Queste proprietà possono essere specificate anche durante la creazione di un SearchBar
oggetto nel codice:
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
};
Lo screenshot seguente mostra il controllo risultante SearchBar
:
Nota
In iOS la SearchBarRenderer
classe contiene un metodo sostituibile UpdateCancelButton
. Questo metodo controlla quando viene visualizzato il pulsante Annulla e può essere sottoposto a override in un renderer personalizzato. Per altre informazioni sui renderer personalizzati, vedere Xamarin.Forms Renderer personalizzati.
Eseguire una ricerca con gestori eventi
È possibile eseguire una ricerca usando il SearchBar
controllo associando un gestore eventi a uno degli eventi seguenti:
SearchButtonPressed
viene chiamato quando l'utente fa clic sul pulsante di ricerca o preme il tasto INVIO.TextChanged
viene chiamato ogni volta che viene modificato il testo nella casella di query.
L'esempio seguente mostra un gestore eventi associato all'evento TextChanged
in XAML e usa un ListView
oggetto per visualizzare i risultati della ricerca:
<SearchBar TextChanged="OnTextChanged" />
<ListView x:Name="searchResults" >
Un gestore eventi può anche essere collegato a un SearchBar
oggetto creato nel codice:
SearchBar searchBar = new SearchBar {/*...*/};
searchBar.TextChanged += OnTextChanged;
Il TextChanged
gestore eventi nel file code-behind è lo stesso, indipendentemente dal fatto che SearchBar
venga creato tramite XAML o codice:
void OnTextChanged(object sender, EventArgs e)
{
SearchBar searchBar = (SearchBar)sender;
searchResults.ItemsSource = DataService.GetSearchResults(searchBar.Text);
}
L'esempio precedente implica l'esistenza di una DataService
classe con un GetSearchResults
metodo in grado di restituire elementi che corrispondono a una query. Il SearchBar
valore della proprietà del Text
controllo viene passato al GetSearchResults
metodo e il risultato viene utilizzato per aggiornare la ListView
proprietà del ItemsSource
controllo. L'effetto complessivo è che i risultati della ricerca vengono visualizzati nel ListView
controllo .
L'applicazione di esempio fornisce un'implementazione DataService
della classe che può essere usata per testare la funzionalità di ricerca.
Eseguire una ricerca usando un modello di visualizzazione
Una ricerca può essere eseguita senza gestori eventi associando le SearchCommand
proprietà e SearchCommandParameter
alle ICommand
implementazioni. Il progetto di esempio illustra queste implementazioni usando il modello Model-View-ViewModel (MVVM). Per altre informazioni sui data binding con MVVM, vedere Data Binding con MVVM.
Il modello di visualizzazione nell'applicazione di esempio contiene il codice seguente:
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();
}
}
}
Nota
Il modello di visualizzazione presuppone l'esistenza di una DataService
classe in grado di eseguire ricerche. La DataService
classe, inclusi i dati di esempio, è disponibile nell'applicazione di esempio.
Il codice XAML seguente mostra come associare un SearchBar
oggetto al modello di visualizzazione di esempio, con un ListView
controllo che visualizza i risultati della ricerca:
<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>
In questo esempio l'oggetto deve essere un'istanza BindingContext
della SearchViewModel
classe . Associa la SearchCommand
proprietà a ICommand
PerformSearch
nel modello di visualizzazione e associa la SearchBar
Text
proprietà alla SearchCommandParameter
proprietà . La ListView.ItemsSource
proprietà è associata alla SearchResults
proprietà del modello di visualizzazione.
Per altre informazioni sull'interfaccia ICommand
e sui binding, vedere Xamarin.Forms data binding e l'interfaccia ICommand.