c# - 在 Xamarin Forms 的导航页面中添加搜索栏

标签 c# xamarin xamarin.forms

我正在按照这些教程在 Xamarin.FormsNavigationPage 中实现 Searchbar:

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

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: 'Unable to convert instance of type 'Android.Support.V7.Widget.Toolbar' to type 'Android.Widget.Toolbar'.'

我不明白为什么会出现这个错误,尽管它表明它在转换时有问题。

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

最佳答案

解决方案

将错误行更改为

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

说明

尽管您共享的代码片段尚不清楚,但似乎您的渲染器正在使用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);

或者如果您仍然需要使用 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);

关于c# - 在 Xamarin Forms 的导航页面中添加搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59438605/

相关文章:

xaml - Xamarin.Forms ImageButton 图像填充

c# - Newtonsoft Json 中的 TypeName 处理注意事项

c# Entity Framework sqlite (spatialite) 空间日期

android - 将 .NET Standard 类库转换为原生 aar/jar

Java.Lang.NoClassDefFoundError android.arch.core.internal.FastSafeIterableMap

android - RadioButton 在带有浅色主题的 Android 10/11 上不可见

c# - 理解delegate在C#中的具体用法

c# - Resharper 转换 LINQ 错误?还是我的代码错了

c# Xamarin 表单 : NavigationPage icon not showing

xcode - xamarin.forms:ibtool 退出,代码为 1,不再支持编译早于 iOS 7 的 IB 文档