Нажмите на значок панели поиска на панели навигации, чтобы активировать панель поиска на панели навигации с помощью форм xamarin - PullRequest
0 голосов
/ 03 марта 2020

Я попытался указать значок на панели навигации и назначить событие щелчка для этого значка. И нажав на иконку, я создал новую строку поиска в CS-файле, но она не работает

<TabbedPage.ToolbarItems>
        <ToolbarItem IconImageSource="search.png"
                     Clicked="ToolbarItem_Clicked"
                     Order="Primary"/>
 </TabbedPage.ToolbarItems>

private void ToolbarItem_Clicked(object sender, EventArgs e)
        {
            SearchBar searchBar = new SearchBar { Placeholder = "Search items..."};

        }

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Если вы хотите достичь этого, вы можете посмотреть на TitleView , вам просто нужно добавить SearchBar к использованию TitleView.

вашего NavigationBar, как показано ниже:

private void ToolbarItem_Clicked(object sender, EventArgs e)
    {
        SearchBar searchBar = new SearchBar { Placeholder = "Search items..." };
        NavigationPage.SetTitleView(this, searchBar);

    }
0 голосов
/ 03 марта 2020

Пока я комментирую, что было бы лучше добавить панель поиска в XAML, а затем обновить видимость, я бы хотел ответить на вопрос, потому что она основана на распространенном заблуждении неопытных разработчиков.

С

private void ToolbarItem_Clicked(object sender, EventArgs e)
{
    SearchBar searchBar = new SearchBar { Placeholder = "Search items..."};
}

вы создаете экземпляр класса SearchBar. В любом случае, это не означает, что он автоматически добавляется на текущую страницу. Хотя может быть возможно каким-то образом - по крайней мере, технически - добавить экземпляр на текущую страницу, определив страницу, которая находится поверх текущего стека навигации, это не очень желательно по нескольким причинам

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

Вместо этого вам придется добавить SearchBar на страницу явно . Как именно зависит от макета вашей страницы, но при условии, что у вас есть StackLayout

<StackLayout x:Name="StackLayout">
<!-- ... -->
</StackLayout>

, вы можете добавить SearchBar с

SearchBar searchBar = new SearchBar { Placeholder = "Search items..."};
StackLayout.Children.Add(searchBar);

Обратите внимание что это добавит SearchBar в конце StackLayout. Предположительно, вы хотели бы добавить его вверху, чего вы можете достичь с помощью

StackLayout.Children.Insert(0, searchBar); // insert searchBar at index 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...