Поделиться через


Панель поиска

.NET пользовательский интерфейс многоплатформенного приложения (.NET MAUI) SearchBar — это контрол для ввода пользователем, используемый для инициации поиска. Элемент SearchBar управления поддерживает текст заполнителя, ввод запросов, выполнение поиска и возможность отмены. В следующем снимке экрана iOS содержится запрос SearchBar с результатами, отображаемыми в ListView.

Screenshot of a SearchBar.Снимок экрана: панель поиска.

SearchBar определяет следующие свойства:

  • — это , определяющий цвет кнопки отмены.
  • HorizontalTextAlignment является значением перечисления TextAlignment, которое определяет горизонтальное выравнивание текста запроса.
  • SearchCommand — это ICommand, который позволяет связывать действия пользователя, такие как касания пальцем или щелчки, с командами, определенными в вьюмодели.
  • SearchCommandParameter — это object, который должен передаваться в SearchCommand.
  • VerticalTextAlignment — это значение перечисления TextAlignment, определяющее вертикальное выравнивание текста запроса.
  • — это , определяющий цвет кнопки отмены.
  • HorizontalTextAlignment является значением перечисления TextAlignment, которое определяет горизонтальное выравнивание текста запроса.
  • ReturnType, типа ReturnType, указывает внешний вид кнопки возврата. Значение по умолчанию этого свойства равно Search.
  • SearchCommand — это возможность ICommand привязки действий пользователя, таких как касания пальца или щелчки, для команд, определенных в режиме просмотра.
  • SearchCommandParameter — это object, который должен передаваться в SearchCommand.
  • SearchIconColor — это Color, определяющий цвет значка поиска.
  • VerticalTextAlignment — это значение перечисления TextAlignment, определяющее вертикальное выравнивание текста запроса.

Эти свойства поддерживаются объектами BindableProperty, что означает, что они могут быть целями для привязок данных и стилизации.

Кроме того, элемент SearchBar объявляет событие, вызываемое SearchButtonPressed при нажатии кнопки поиска или нажатия клавиши Enter.

SearchBar происходит от класса InputView, от которого наследует следующие свойства:

  • CharacterSpacing, тип double, задает интервал между символами в введенном тексте.
  • типа определяет положение курсора в редакторе.
  • FontAttributes, типа FontAttributes, определяет стиль текста.
  • FontAutoScalingEnabled, типа bool, определяет, будет ли текст отражать параметры масштабирования, заданные в операционной системе. Значение по умолчанию этого свойства равно true.
  • FontFamily, типа string, определяет семейство шрифтов.
  • , типа , определяет размер шрифта.
  • IsReadOnlybool тип определяет, должно ли запрещаться пользователю изменять текст. Значение по умолчанию этого свойства равно false.
  • IsSpellCheckEnabled, типа bool, определяет, включена ли проверка орфографии.
  • IsTextPredictionEnabled, типа bool, контролирует, включено ли прогнозирование текста и автоматическое исправление текста.
  • Keyboard типа Keyboard указывает на экранную клавиатуру, отображаемую при вводе текста.
  • MaxLength, тип int, определяет максимальную длину входных данных.
  • Placeholder, типа string, определяет текст, отображаемый когда элемент управления пуст.
  • PlaceholderColor, тип Color, определяет цвет заполнителя текста.
  • SelectionLength, типа int, представляет длину выделенного текста в элементе управления.
  • Text, типа string, определяет текст, введенный в элемент управления.
  • , типа , определяет цвет введенного текста.
  • TextTransform, тип TextTransform, указывает регистр введенного текста.

Эти свойства поддерживаются объектами BindableProperty, что означает, что они могут быть целями для привязок данных и стилизации.

Кроме того, InputView определяет событие TextChanged, которое возникает при изменении текста в Entry. Объект TextChangedEventArgs, сопровождающий событие TextChanged, имеет свойства NewTextValue и OldTextValue, которые указывают новый и старый текст соответственно.

Чтобы создать поле поиска, создайте объект SearchBar и установите свойства так, чтобы его текст формулировал инструкцию пользователю ввести поисковую фразу.

В следующем примере XAML показано, как создать строку поиска:

<SearchBar Placeholder="Search items..." />

Эквивалентный код на C# выглядит так:

SearchBar searchBar = new SearchBar { Placeholder = "Search items..." };

Примечание.

В iOS клавиатура обратимого ввода может охватывать текстовое поле, когда поле находится в нижней части экрана, что затрудняет ввод текста. Однако в приложении iOS для .NET MAUI страницы автоматически прокручиваются, когда клавиатура обратимого ввода будет охватывать поле ввода текста, чтобы поле было выше клавиатуры обратимого ввода. Метод KeyboardAutoManagerScroll.Disconnect в пространстве имен Microsoft.Maui.Platform можно вызвать, чтобы отключить это поведение по умолчанию. Метод KeyboardAutoManagerScroll.Connect можно вызвать для повторного включения поведения после его отключения.

Выполнение поиска с помощью обработчиков событий

Поиск можно выполнить с помощью элемента управления SearchBar, подключив обработчик событий к одному из следующих событий:

  • SearchButtonPressed, который вызывается, когда пользователь нажимает кнопку поиска или нажимает клавишу ВВОД.
  • TextChanged, который вызывается при изменении текста в поле запроса. Это событие наследуется от класса InputView.

В следующем примере XAML показан обработчик событий, подключенный к TextChanged событию, и используется ListView для отображения результатов поиска.

<SearchBar TextChanged="OnTextChanged" />
<ListView x:Name="searchResults" >

В этом примере TextChanged событие связано с обработчиком событий с именем OnTextChanged. Этот обработчик находится в файле программной части:

void OnTextChanged(object sender, EventArgs e)
{
    SearchBar searchBar = (SearchBar)sender;
    searchResults.ItemsSource = DataService.GetSearchResults(searchBar.Text);
}

В этом примере класс DataService с методом GetSearchResults используется для возврата элементов, соответствующих запросу. Значение свойства элемента управления SearchBarText передается методу GetSearchResults, а результат используется для обновления свойства элемента управления ListViewItemsSource. Общий эффект заключается в том, что результаты поиска отображаются в ListView.

Выполнение поиска с помощью модели представления

Поиск можно выполнить без обработчиков событий, привязав свойство SearchCommand к реализации ICommand. Для получения дополнительной информации о командировании см. раздел "Командирование".

В следующем примере показан класс ViewModel, содержащий ICommand свойство с именем PerformSearch:

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 способного выполнять поиск.

В следующем примере XAML используется класс SearchViewModel:

<ContentPage ...
             xmlns:viewmodels="clr-namespace:SearchBarDemos.ViewModels"
             x:DataType="viewmodels:SearchViewModel">
    <ContentPage.BindingContext>
        <viewmodels:SearchViewModel />
    </ContentPage.BindingContext>
    <StackLayout>
        <SearchBar x:Name="searchBar"
                   SearchCommand="{Binding PerformSearch}"
                   SearchCommandParameter="{Binding Text, x:DataType='SearchBar', Source={x:Reference searchBar}}"/>
        <ListView x:Name="searchResults"
                  ItemsSource="{Binding SearchResults}" />
    </StackLayout>
</ContentPage>

В этом примере BindingContext присваивается экземпляр класса SearchViewModel. Свойство SearchBar.SearchCommand привязывается к свойству PerformSearch модели представления, а свойство SearchCommandParameter привязывается к свойству SearchBar.Text. Свойство ListView.ItemsSource привязано к свойству SearchResults в модели представления.

Скрытие и отображение клавиатуры обратимого ввода

Класс SoftInputExtensions в пространстве имен Microsoft.Maui предоставляет ряд методов расширения, которые поддерживают взаимодействие с клавиатурой мягкого ввода на элементах управления, поддерживающих ввод текста. Класс определяет следующие методы:

  • IsSoftInputShowing, который проверяет, отображает ли устройство клавиатуру обратимого ввода.
  • HideSoftInputAsync, который попытается скрыть экранную клавиатуру, если она отображается в данный момент.
  • ShowSoftInputAsync, который попытается показать экранную клавиатуру, если она в настоящее время скрыта.

В следующем примере показано, как скрыть экранную клавиатуру в SearchBar с именем searchBar, если она отображается в данный момент времени:

if (searchBar.IsSoftInputShowing())
   await searchBar.HideSoftInputAsync(System.Threading.CancellationToken.None);