单击导航栏中的搜索栏图标以使用xamarin表单激活导航栏中的搜索栏

时间:2020-03-03 06:25:37

标签: xamarin events search xamarin.forms navigationbar

我尝试在导航栏中给出一个图标,并对该图标给出click事件。然后单击该图标,我在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 :(得分:0)

虽然我赞同以下意见,即最好在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

答案 1 :(得分:0)

如果要实现这一目标,可以查看TitleView,只需将SearchBar添加到NavigationBar的TitleView

用法如下:

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

    }
相关问题