在 tabbedpage 的子页面的 segmentcontrol 内路由滑动动作
Route the swipe action inside segmentcontrol of a child page of tabbedpage
所以我在跨平台应用程序中使用Xamarin表单,主要UI是一个标签页,其中一个页面有一个segmented control,段控件将切换列表视图控件的数据。问题是当我滑动屏幕时,它会在标签页的不同子页面之间切换,但我希望它在子页面内的段控件之间切换。无论如何我可以让滑动不适用于标签页,但内段控制?
XAML 对于标签页:
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MainApp"
x:Class="MainApp.MainPage">
<!--Pages can be added as references or inline-->
<local:NewsPage Title="News" Icon="icon.png"/>
<ContentPage Title="Guides" Icon="icon.png"/>
<ContentPage Title="Wallets" Icon="icon.png"/>
<ContentPage Title="Me" Icon="icon.png"/>
</TabbedPage>
新闻页面:
<controls:SegmentedControl x:Name="SegControl" TintColor="#007AFF" SelectedSegment="0"
VerticalOptions="Center"
Grid.Column="1" ValueChanged="SegControl_ValueChanged">
<controls:SegmentedControl.Children>
<controls:SegmentedControlOption Text="Type1" />
<controls:SegmentedControlOption Text="Type2" />
</controls:SegmentedControl.Children>
</controls:SegmentedControl>
<ListView ItemsSource="{Binding Source={StaticResource SArray}}" Grid.Row="1" Grid.Column="0" RowHeight="85">
<ListView.ItemTemplate> ... </ListView>
我认为这是在 Android 上?我不确定滑动是否适用于 iOS。
一个选项是禁用在标签页上滑动。
您可以使用自定义渲染器执行此操作。
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(CustomTabbedPageRenderer))]
namespace App1.Droid
{
public class CustomTabbedPageRenderer : TabbedPageRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
{
var info = typeof(TabbedPageRenderer).GetTypeInfo();
var fieldInfo = info.GetField("_useAnimations", BindingFlags.Instance | BindingFlags.NonPublic);
fieldInfo.SetValue(this, false);
base.OnElementChanged(e);
}
}
}
编辑
看起来这已经添加到 Xamarin Forms 中了:
https://github.com/xamarin/Xamarin.Forms/pull/409
另一个编辑
还有另一种方式。我今天学到了很多东西!
public partial class MainPage : Xamarin.Forms.TabbedPage
{
public MainPage()
{
InitializeComponent();
this.On<Xamarin.Forms.PlatformConfiguration.Android>().SetIsSwipePagingEnabled(false);
}
}
我很开心
来自XAML
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
android:TabbedPage.IsSwipePagingEnabled="False"
所以我在跨平台应用程序中使用Xamarin表单,主要UI是一个标签页,其中一个页面有一个segmented control,段控件将切换列表视图控件的数据。问题是当我滑动屏幕时,它会在标签页的不同子页面之间切换,但我希望它在子页面内的段控件之间切换。无论如何我可以让滑动不适用于标签页,但内段控制?
XAML 对于标签页:
<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MainApp"
x:Class="MainApp.MainPage">
<!--Pages can be added as references or inline-->
<local:NewsPage Title="News" Icon="icon.png"/>
<ContentPage Title="Guides" Icon="icon.png"/>
<ContentPage Title="Wallets" Icon="icon.png"/>
<ContentPage Title="Me" Icon="icon.png"/>
</TabbedPage>
新闻页面:
<controls:SegmentedControl x:Name="SegControl" TintColor="#007AFF" SelectedSegment="0"
VerticalOptions="Center"
Grid.Column="1" ValueChanged="SegControl_ValueChanged">
<controls:SegmentedControl.Children>
<controls:SegmentedControlOption Text="Type1" />
<controls:SegmentedControlOption Text="Type2" />
</controls:SegmentedControl.Children>
</controls:SegmentedControl>
<ListView ItemsSource="{Binding Source={StaticResource SArray}}" Grid.Row="1" Grid.Column="0" RowHeight="85">
<ListView.ItemTemplate> ... </ListView>
我认为这是在 Android 上?我不确定滑动是否适用于 iOS。
一个选项是禁用在标签页上滑动。
您可以使用自定义渲染器执行此操作。
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(CustomTabbedPageRenderer))]
namespace App1.Droid
{
public class CustomTabbedPageRenderer : TabbedPageRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
{
var info = typeof(TabbedPageRenderer).GetTypeInfo();
var fieldInfo = info.GetField("_useAnimations", BindingFlags.Instance | BindingFlags.NonPublic);
fieldInfo.SetValue(this, false);
base.OnElementChanged(e);
}
}
}
编辑
看起来这已经添加到 Xamarin Forms 中了:
https://github.com/xamarin/Xamarin.Forms/pull/409
另一个编辑
还有另一种方式。我今天学到了很多东西!
public partial class MainPage : Xamarin.Forms.TabbedPage
{
public MainPage()
{
InitializeComponent();
this.On<Xamarin.Forms.PlatformConfiguration.Android>().SetIsSwipePagingEnabled(false);
}
}
我很开心
来自XAML
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
android:TabbedPage.IsSwipePagingEnabled="False"