我正在按照这些教程在 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
,我以 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/