我已经尝试在导航栏中给出一个图标,并对该图标给出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..."};
}
虽然我同意最好在XAML中添加搜索栏然后更新可见性,但我想回答这个问题,因为它根植于对经验不足的开发人员的普遍误解。
带
private void ToolbarItem_Clicked(object sender, EventArgs e)
{
SearchBar searchBar = new SearchBar { Placeholder = "Search items..."};
}
您创建实例的SearchBar
类。无论如何,这并不意味着它会自动添加到当前页面。尽管可能(至少从技术上来说)可以通过确定当前导航堆栈顶部的页面来将实例添加到当前页面,但出于以下几个原因,这并不是真正可取的]
相反,您必须将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
如果要实现这一点,可以查看TitleView,只需将SearchBar
添加到NavigationBar的TitleView
。