在 Xamarin 表单的导航页面中添加 SearchBar

Posted

技术标签:

【中文标题】在 Xamarin 表单的导航页面中添加 SearchBar【英文标题】:Add SearchBar in Navigation Page in Xamarin Forms 【发布时间】:2019-12-21 18:03:32 【问题描述】:

我正在按照这些教程在 Xamarin.Forms 中实现 NavigationPage 中的 Searchbar

Searchbar in Navigation bar Or TabbedPage How to add search bar in navigation bar in Xamarin forms A ios and android app to monitor the views and clones of your GitHub repos Xamarin Forms - ContentPage with SearchBar in the Navigation bar.

我有一个简单的ContentPage,我在 App.cs 中打开 NavigationPage 表单:

var navigationPage = new Xamarin.Forms.NavigationPage(new Home());
navigationPage.On<iOS>().SetPrefersLargeTitles(true);
MainPage = navigationPage;

在运行项目时,我在以下行中的 Renderer Page 中遇到错误:

Toolbar GetToolbar() => CrossCurrentActivity.Current.Activity.FindViewById<Toolbar>(Resource.Id.toolbar);

抛出的异常是:

System.InvalidCastException: '无法将'Android.Support.V7.Widget.Toolbar'类型的实例转换为'Android.Widget.Toolbar'类型。'

我不知道为什么会出现这个错误,虽然它表明它在转换时有问题。

有人看到我的错误在哪里吗?

【问题讨论】:

【参考方案1】:

解决方案

将您的错误行更改为

var toolbar = CrossCurrentActivity.Current.Activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);

说明

即使您共享的代码不清楚,但您的渲染器 Class 似乎是using Android.Widget,它还定义了一个Toolbar 成员并且可能与返回冲突FindViewById 的值是 Android.Support.V7.Widget.Toolbar

所以,既然已经解释了修复,我想补充一点,解决您的问题的更好方法是删除 using Android.Widget 并添加 using Android.Support.V7.Widget.Toolbar,这样您就可以编写类似的代码

using Android.Support.V7.Widget;
...

// This Toolbar refers to the one in V7!
Toolbar toolbar = CrossCurrentActivity.Current.Activity.FindViewById<Toolbar>(Resource.Id.toolbar);

或者如果您仍然需要using Android.Widget,那么您可以使用别名:

using Android.Widget;
using V7Toolbar = Android.Support.V7.Widget.Toolbar;
...

// This Toolbar refers to the one in V7!
V7Toolbar toolbar = CrossCurrentActivity.Current.Activity.FindViewById<V7Toolbar>(Resource.Id.toolbar);

【讨论】:

以上是关于在 Xamarin 表单的导航页面中添加 SearchBar的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin构成底部导航栏

如何在xamarin表单ios中隐藏标签栏导航标题

在返回导航中跳过 xamarin 表单中的页面

Xamarin 表单导航和处理登录页面

如何在具有棱镜的Xamarin表单中为contentview创建单独的视图模型?

Xamarin 表单和页面之间的导航