2017-03-17 7 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を使用する場合は、お求めのコードが適しています。あなたは

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 

はジェームズからXamarin.FormsでUISegmentedControlを使用する方法を示す良い例があります(Androidの固有のコードを#if __ANDROID__)条件付きディレクティブ#if __IOS__でのiOS固有のコードをラップする必要があり、その場合には

Montemagno Embedding Native Controls into Xamarin.Forms

のように、PCLのアプローチに基づいた解決策があるようです。

Portable Class Library approach with Xamarin.Formsを使用して、カスタムコントロールを作成する必要があります(this simple example about UISegmentedControlを確認してください)か、それを説明いただきありがとうございます@valdetero SegmentedControl.FormsPlugin

+0

のようなサードパーティ製のコントロールを使用します。私はセグメント化されたコントロールを今ビューにレンダリングすることができます。しかし、私はコードを使用してそれをしたい。どのように私はコードの下に以下のコードを作成できますか? <コントロール: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 =新しいSegmentedControl(); \t \t \t \t \t \t SegmentedControlOption segp1 = new SegmentedControlOption(); \t \t \t \t \t \t segp1。テキスト= "インド"; \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 = "その他"; \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

関連する問題