Xamarin表格嵌套选项卡

时间:2019-01-03 00:32:48

标签: c# xamarin.forms

我注意到可以创建带有嵌套标签的移动应用。

这可能是Xamarin形式吗? 请参见下面的屏幕截图:

Tabs with nested tabs

我可以使用TabbedPage在iOS上创建底部的标签,但是如何在页面顶部创建嵌套的标签?

Nested tabs

谢谢

2 个答案:

答案 0 :(得分:0)

与在本机应用程序上执行的方式相同。没有本地的嵌套选项卡,因此Xamarin不支持它,因为这种东西不存在。

在本机应用程序中,您具有顶部的控件(在iOS和Android上称为SegmentedControl,没有开箱即用的控件),您可以在其中选择值,然后在单击时手动更改下面的视图。 / p>

答案 1 :(得分:0)

  

在Xamarin表单中可以吗?

是的,当然。您可以使用CustomRenderer来实现它。请参考以下代码。

enter image description here

  

在iOS Project中。创建一个 pageRenderer

using System;

using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

using app1;
using app1.iOS;

using UIKit;
using Foundation;
using CoreGraphics;
using ObjCRuntime;

[assembly:ExportRenderer(typeof(MyPage1),typeof(MyPageRenderer))]
namespace app1.iOS
{
  public class MyPageRenderer:PageRenderer
  {
    public MyPageRenderer()
    {
    }


    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        if (ViewController != null)
        {

           NSArray items = NSArray.FromStrings(new string[] { "Courses", "Favourite", "Recent" });

           UISegmentedControl segmentedControl = new UISegmentedControl(items)
           {
              Frame = new CGRect(50, 20, NativeView.Bounds.Width - 100, 35)
           };

           segmentedControl.SelectedSegment = 0;
           segmentedControl.TintColor = UIColor.Red;
           segmentedControl.ApportionsSegmentWidthsByContent = true; //Change the width of the segment based on the content of the segment

           segmentedControl.AddTarget(this, new Selector("ValueChanged:"), UIControlEvent.ValueChanged);

           NativeView.AddSubview(segmentedControl);
        }
    }


    [Export("ValueChanged:")]
    void ValueChanged(UISegmentedControl sender)
    {
       MessagingCenter.Send<Object, int>(this, "ClickSegmentedControl", (int)sender.SelectedSegment);

        // switch((int)sender.SelectedSegment){
        //  case 0:

        //      break;

        //  case 1:

        //      break;

        //  case 2:

        //      break;

        //  default:

        //      break;

        //}
     }

  }
}
  

在表单中,您可以订阅该消息。如果您想在单击分段后在表单中处理事件。

public MyPage1()
{
   //...

   MessagingCenter.Subscribe<Object, int>(this, "ClickSegmentedControl", (sender, arg) =>
   {
            Console.WriteLine(arg); //arg is num of the segment that you clicked.
   });


}