Xamarin.Forms Панель поиска
Это Xamarin.FormsSearchBar
элемент управления входным вводом пользователя, используемый для инициирования поиска. Элемент SearchBar
управления поддерживает текст заполнителя, входные данные запроса, выполнение поиска и отмену. На следующем снимке экрана показан SearchBar
запрос с результатами, отображаемыми в :ListView
Класс SearchBar
определяет следующие свойства:
CancelButtonColor
— это значениеColor
, определяющее цвет кнопки отмены.CharacterSpacing
с типомdouble
представляет собой интервал между знаками текстаSearchBar
.FontAttributes
FontAttributes
— это значение перечисления, определяющее, является лиSearchBar
шрифт полужирным, курсивом или нет.FontFamily
— это свойство, определяющееstring
семейство шрифтов, используемое этим элементомSearchBar
.FontSize
может быть значение перечисления илиdouble
значение, представляющееNamedSize
определенные размеры шрифтов на разных платформах.HorizontalTextAlignment
TextAlignment
— это значение перечисления, определяющее горизонтальное выравнивание текста запроса.VerticalTextAlignment
TextAlignment
— это значение перечисления, определяющее вертикальное выравнивание текста запроса.Placeholder
string
— это объект, определяющий текст заполнителя, например "Поиск...".PlaceholderColor
— это объектColor
, определяющий цвет заполнителя.SearchCommand
— это возможностьICommand
привязки действий пользователя, таких как касания пальца или щелчки, для команд, определенных в режиме просмотра.SearchCommandParameter
— это параметрobject
, который должен передаватьсяSearchCommand
в .Text
string
— это содержащий текст запроса в объектеSearchBar
.TextColor
— это объект, определяющийColor
цвет текста запроса.TextTransform
TextTransform
— это значение, определяющее регистрSearchBar
текста.
Эти свойства поддерживаются BindableProperty
объектами, что означает SearchBar
, что их можно настроить и быть целевым объектом привязок данных. Указание свойств шрифта в объекте SearchBar
соответствует настройке текста в других Xamarin.Forms элементах управления "Текст". Дополнительные сведения см. в разделе "Шрифты".Xamarin.Forms
Создание панели поиска
Экземпляр SearchBar
можно создать в XAML. Его необязательное Placeholder
свойство можно задать для определения текста подсказки в поле ввода запроса. Значение по умолчанию является Placeholder
пустой строкой, поэтому заполнитель не будет отображаться, если он не задан. В следующем примере показано, как создать экземпляр в SearchBar
XAML с необязательным Placeholder
набором свойств:
<SearchBar Placeholder="Search items..." />
Можно SearchBar
также создать в коде:
SearchBar searchBar = new SearchBar{ Placeholder = "Search items..." };
Свойства внешнего вида SearchBar
Элемент SearchBar
управления определяет множество свойств, которые настраивают внешний вид элемента управления. В следующем примере показано, как создать экземпляр SearchBar
в XAML с указанными несколькими свойствами:
<SearchBar Placeholder="Search items..."
CancelButtonColor="Orange"
PlaceholderColor="Orange"
TextColor="Orange"
TextTransform="Lowercase"
HorizontalTextAlignment="Center"
FontSize="Medium"
FontAttributes="Italic" />
Эти свойства также можно указать при создании объекта в коде SearchBar
:
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
};
На следующем снимка экрана показан результирующий SearchBar
элемент управления:
Примечание.
В iOS SearchBarRenderer
класс содержит переопределимый UpdateCancelButton
метод. Этот метод управляет при появлении кнопки отмены и может быть переопределен в пользовательском отрисовщике. Дополнительные сведения о пользовательских отрисовщиках см. в разделе Xamarin.Forms "Пользовательские отрисовщики".
Выполнение поиска с помощью обработчиков событий
Поиск можно выполнить с помощью SearchBar
элемента управления, подключив обработчик событий к одному из следующих событий:
SearchButtonPressed
вызывается, когда пользователь нажимает кнопку поиска или нажимает клавишу ВВОД.TextChanged
вызывается в любое время изменения текста в поле запроса.
В следующем примере показан обработчик событий, подключенный к TextChanged
событию в XAML, и используется ListView
для отображения результатов поиска:
<SearchBar TextChanged="OnTextChanged" />
<ListView x:Name="searchResults" >
Обработчик событий также можно подключить к созданному в коде SearchBar
:
SearchBar searchBar = new SearchBar {/*...*/};
searchBar.TextChanged += OnTextChanged;
Обработчик TextChanged
событий в файле программной части совпадает с тем, создается ли SearchBar
он с помощью XAML или кода:
void OnTextChanged(object sender, EventArgs e)
{
SearchBar searchBar = (SearchBar)sender;
searchResults.ItemsSource = DataService.GetSearchResults(searchBar.Text);
}
В предыдущем примере предполагается существование DataService
класса с методом GetSearchResults
, способным возвращать элементы, соответствующие запросу. Значение SearchBar
свойства элемента управления Text
передается GetSearchResults
методу, а результат используется для обновления ListView
свойства элемента управления ItemsSource
. Общий эффект заключается в том, что результаты поиска отображаются в элементе ListView
управления.
Пример приложения предоставляет DataService
реализацию класса, которую можно использовать для тестирования функциональных возможностей поиска.
Выполнение поиска с помощью модели представления
Поиск можно выполнить без обработчиков событий путем привязки SearchCommand
свойств SearchCommandParameter
к ICommand
реализации. Пример проекта демонстрирует эти реализации с помощью шаблона Model-View-ViewModel (MVVM). Дополнительные сведения о привязках данных с помощью MVVM см. в разделе "Привязки данных" с MVVM.
Образец представления в примере приложения содержит следующий код:
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();
}
}
}
Примечание.
В представлении предполагается, что существует класс, способный DataService
выполнять поиск. Класс DataService
, включая примеры данных, доступен в примере приложения.
В следующем XAML показано, как привязать объект SearchBar
к примеру viewmodel с элементом ListView
управления, отображающим результаты поиска:
<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>
В этом примере устанавливается BindingContext
экземпляр SearchViewModel
класса. Он привязывает свойство к ICommand
объекту viewmodel и привязывает SearchBar
Text
SearchCommand
свойство к свойству.SearchCommandParameter
PerformSearch
Свойство ListView.ItemsSource
привязано к SearchResults
свойству viewmodel.
Дополнительные сведения об интерфейсе ICommand
и привязках см. в привязке Xamarin.Forms данных и интерфейсе ICommand.