2017-03-17 21 views
2

这是迄今为止我所尝试的。我正在尝试以编程方式加载它。我正在将这些代码写入多平台项目中。如附图所示。如何在Xamarin.Forms中的多平台应用程序中使用分段控制

图片在这里。

enter image description here

var layout = new StackLayout() 
{ 
    Orientation = StackOrientation.Vertical, 
    Spacing = 20, 
    Padding = new Thickness(0, 20, 0, 0) 
}; 

if (Device.OS == TargetPlatform.iOS) 
{ 
    var segmentControl = new UISegmentedControl(); 
    segmentControl.Frame = new CGRect(20, 20, 280, 40); 
    segmentControl.InsertSegment("One", 0, false); 
    segmentControl.InsertSegment("Two", 1, false); 
    segmentControl.SelectedSegment = 1; 
    segmentControl.ValueChanged += async (sender, e) => 
    { 
     var selectedSegmentId = (sender as UISegmentedControl).SelectedSegment; 
     await MainPage.DisplayAlert($"Native Segmented Control Clicked {selectedSegmentId}", 
                "Whoa!!!!!!", "OK"); 
    }; 
    layout.Children.Add(segmentControl); 
} 

是否有可能做这样吗?或者自定义渲染是唯一的解决方案?

回答

3

在Xamarin.Forms编写的iOS应用程序中可以使用SegmentedControl。

如果您使用shared project approach with Xamarin.Forms,则您询问的代码将非常适合。

在你需要用特定的iOS代码的条件指令#if __IOS__#if __ANDROID__ Android的特定代码)

var layout = new StackLayout() 
{ 
    Orientation = StackOrientation.Vertical, 
    Spacing = 20, 
    Padding = new Thickness(0, 20, 0, 0) 
}; 

#if __IOS__ 
if (Device.OS == TargetPlatform.iOS) 
{ 
    var segmentControl = new UISegmentedControl(); 
    segmentControl.Frame = new CGRect(20, 20, 280, 40); 
    segmentControl.InsertSegment("One", 0, false); 
    segmentControl.InsertSegment("Two", 1, false); 
    segmentControl.SelectedSegment = 1; 
    segmentControl.ValueChanged += async (sender, e) => 
    { 
     var selectedSegmentId = (sender as UISegmentedControl).SelectedSegment; 
     await MainPage.DisplayAlert($"Native Segmented Control Clicked {selectedSegmentId}", 
                "Whoa!!!!!!", "OK"); 
    }; 
    layout.Children.Add(segmentControl); 
} 
#endif 

没有说明如何使用UISegmentedControl与詹姆斯Xamarin.Forms一个很好的例子,这种情况下, Montemagno Embedding Native Controls into Xamarin.Forms

但是,它看起来像你有你的基于PCL方法的解决方案。

使用Portable Class Library approach with Xamarin.Forms,你必须创建一个自定义控制(检查this simple example about UISegmentedControl),或使用第三方控件像SegmentedControl.FormsPlugin

+0

@valdetero谢谢你解释它。我现在可以将分段控件渲染到视图中。但我想用后面的代码来做。我如何在后面的代码中创建下面的代码? <控件:SegmentedControl> \t \t \t \t <控件:SegmentedControl.Children> \t \t \t \t \t <控件:SegmentedControlOption文本= “印”/> \t \t \t \t <控件:SegmentedControlOption文本= “USA”/ > \t \t \t \t \t <控件:SegmentedControlOption文本= “其他”/> \t \t \t \t \t \t \t Dev

+0

我刚才使用下面的代码,它的工作就像魅力! SegmentedControl objSeg = new SegmentedControl(); \t \t \t \t \t \t SegmentedControlOption segp1 = new SegmentedControlOption(); \t \t \t \t \t \t segp1。Text =“印度”; \t \t \t \t \t \t SegmentedControlOption segp2 = new SegmentedControlOption(); \t \t \t \t \t \t segp1.Text =“Usa”; \t \t \t \t \t \t SegmentedControlOption segp3 = new SegmentedControlOption(); \t \t \t \t \t \t segp1.Text =“Other”; \t \t \t \t \t \t objSeg.Children.Add(segp1); \t \t \t \t \t \t objSeg.Children.Add(segp2); \t \t \t \t \t \t objSeg.Children.Add(segp3); \t \t \t \t \t \t layout.Children.Add(objSeg); – Dev

+0

非常感谢你的帮助。 – Dev

相关问题