我尝试在导航栏中给出一个图标,并对该图标给出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..."};
}
答案 0 :(得分:0)
虽然我赞同以下意见,即最好在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
答案 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);
}