Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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è unColoroggetto che definisce il colore del pulsante Annulla.CharacterSpacing, di tipodouble, è la spaziatura tra i caratteri delSearchBartesto.FontAttributesè unFontAttributesvalore di enumerazione che determina se ilSearchBartipo di carattere è grassetto, corsivo o nessuno dei due.FontFamilyè un oggettostringche determina la famiglia di caratteri utilizzata daSearchBar.FontSizepuò essere unNamedSizevalore di enumerazione o undoublevalore che rappresenta dimensioni specifiche del carattere tra le piattaforme.HorizontalTextAlignmentè unTextAlignmentvalore di enumerazione che definisce l'allineamento orizzontale del testo della query.VerticalTextAlignmentè unTextAlignmentvalore di enumerazione che definisce l'allineamento verticale del testo della query.Placeholderè unstringoggetto che definisce il testo segnaposto, ad esempio "Search...".PlaceholderColorè unColoroggetto che definisce il colore del testo segnaposto.SearchCommandè un oggettoICommandche consente l'associazione di azioni utente, ad esempio tocco di dito o clic, ai comandi definiti in un modello di visualizzazione.SearchCommandParameterè unobjectoggetto che specifica il parametro che deve essere passato aSearchCommand.Textè un oggettostringcontenente il testo della query nell'oggettoSearchBar.TextColorè unColoroggetto che definisce il colore del testo della query.TextTransformè unTextTransformvalore che determina la combinazione di maiuscole e minuscole delSearchBartesto.
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:
SearchButtonPressedviene chiamato quando l'utente fa clic sul pulsante di ricerca o preme il tasto INVIO.TextChangedviene 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.

