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

问题描述 投票:0回答:2

我已经尝试在导航栏中给出一个图标,并对该图标给出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..."};

        }
xamarin events search xamarin.forms navigationbar
2个回答
0
投票

虽然我同意最好在XAML中添加搜索栏然后更新可见性,但我想回答这个问题,因为它根植于对经验不足的开发人员的普遍误解。

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

创建实例SearchBar类。无论如何,这并不意味着它会自动添加到当前页面。尽管可能(至少从技术上来说)可以通过确定当前导航堆栈顶部的页面来将实例添加到当前页面,但出于以下几个原因,这并不是真正可取的]

  • 从OOP的角度来看是不直观的
  • 您可能想要准备视图并在以后添加它们
  • 您可能想将视图添加到其他页面
  • 甚至还不清楚where
  • 将该视图添加到当前页面中。通常可以在多个地方添加视图。
  • ...
  • 相反,您必须将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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.