如何在Xamarin.Forms中的多平台应用程序中使用分段控制

时间:2017-03-17 01:25:36

标签: xamarin xamarin.forms xamarin-studio

到目前为止我尝试过的是什么。我试图以编程方式加载它。我在多平台项目中编写此代码。如附图所示。

我在这里。

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);
}

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

1 个答案:

答案 0 :(得分:3)

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

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

在这种情况下,您需要在条件指令#if __IOS__中包含特定于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与来自James Montemagno的Xamarin.Forms一起使用Embedding Native Controls into Xamarin.Forms

然而,看起来你有基于PCL方法的解决方案。

使用Portable Class Library approach with Xamarin.Forms时,您必须创建自定义控件(选中this simple example about UISegmentedControl)或使用第三方控件,例如SegmentedControl.FormsPlugin