繁体   English   中英

在 Xamarin Forms 的导航页面中添加 SearchBar

[英]Add SearchBar in Navigation Page in Xamarin Forms

我正在按照这些教程在SearchbarNavigationPage中实现Searchbar

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

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

在运行项目时,我在以下行中的渲染器页面中收到错误:

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

抛出的异常是:

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

我无法弄清楚为什么会出现此错误,尽管它表明它在转换时存在问题。

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

解决方案

将您的错误行更改为

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

解释

尽管您共享的代码段不清楚,但您的 Renderer Class似乎正在using Android.Widget ,它也定义了一个Toolbar成员,并且可能与FindViewById的返回值( Android.Support.V7.Widget.Toolbar相冲突Android.Support.V7.Widget.Toolbar .工具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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM