TabbedPage 公开了一个 CurrentPageChanged 事件(或者您可以覆盖 OnCurrentPageChanged),该事件仅在所选选项卡更改时触发,因此如果您想在用户更改选项卡时滚动,则需要订阅该事件。似乎不需要这个,但以防万一......
Xamarin.Forms 没有在第二次选择已选择的选项卡时触发的内置事件。不过,您可以通过子类化 Xamarin 的 TabbedPage 渲染器来使用自定义渲染器来实现这一点。我在这里写了它,并且在这里有一个适用于 iOS、Android 和 UWP的Xamarin.Forms 解决方案。
你没有提到平台,所以假设你想要 iOS 和 Android,核心位如下。
iOS 自定义渲染器
public class MainTabPageRenderer : TabbedRenderer
{
private UIKit.UITabBarItem _prevItem;
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
if (SelectedIndex < TabBar.Items.Length)
_prevItem = TabBar.Items[SelectedIndex];
}
public override void ItemSelected(UIKit.UITabBar tabbar,
UIKit.UITabBarItem item)
{
if (_prevItem == item && Element is MainPage)
{
// the same tab was selected a second time, so do something
}
_prevItem = item;
}
}
Android 自定义渲染器
public class MainTabPageRenderer : TabbedPageRenderer, TabLayout.IOnTabSelectedListener
{
void TabLayout.IOnTabSelectedListener.OnTabReselected(TabLayout.Tab tab)
{
if (Element is MainPage)
{
// the same tab was selected a second time, so do something
}
}
}
捕获该事件后,使用 ListView.ScrollTo 方法滚动到顶部。