在 Xamarin 表单的导航页面中添加 SearchBar
Posted
技术标签:
【中文标题】在 Xamarin 表单的导航页面中添加 SearchBar【英文标题】:Add SearchBar in Navigation Page in Xamarin Forms 【发布时间】:2019-12-21 18:03:32 【问题描述】:我正在按照这些教程在 Xamarin.Forms 中实现 NavigationPage
中的 Searchbar
:
我有一个简单的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的主要内容,如果未能解决你的问题,请参考以下文章