2017-01-01 10 views
0

私はXamarinを学んでおり、C#の基本を知っています。私が遭遇した最初のコードのいずれかがこれはどのように機能しますか?何が起こっているのですか?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Xamarin.Forms; 
namespace Hello 
{ 
    public class App : Application 
    { 
    public App() 
     { 
      // The root page of your application 
      MainPage = new ContentPage 
      { 
       Content = new StackLayout 
       { 
        VerticalOptions = LayoutOptions.Center, 
        Children = { 
         new Label { 
          HorizontalTextAlignment = TextAlignment.Center, 
          Text = "Welcome to Xamarin Forms!" 
         } 
        } 
       } 
      }; 
     } 
     protected override void OnStart() 
     { 
      // Handle when your app starts 
     } 
     protected override void OnSleep() 
     { 
      // Handle when your app sleeps 
     } 
     protected override void OnResume() 
     { 
      // Handle when your app resumes 
     } 
    } 
} 

である私は問題を抱えている部分は、私がここで何が起こっているか理解していない

Children = { 
    new Label { 
     HorizontalTextAlignment = TextAlignment.Center, 
     Text = "Welcome to Xamarin Forms!" 
} 

です。 Childrenとは何ですか?それは何に割り当てられているのですか?

+4

子供の例を見ることができるが、より正確にはStackLayout –

+1

の財産である、それは[ 'レイアウト']から継承されたプロパティです(https://developer.xamarin.com/ api/property/Xamarin.Forms.Layout%3CT%3E.Children /) – UnholySheep

+0

このリンクはあなたに良いアイデアを提供しますhttps://developer.xamarin.com/api/type/Xamarin.Forms.StackLayout/ – Valkyrie

答えて

1

Childrenは割り当てられていませんが、Childrenに初期化されています。プロパティ 'Children'はブラウズできないため、Intellisenseでは表示されません。

ChildrenIList<View>です。あなたはこのようなコレクションを初期化することができます

は...同様

List<string> list = new List<string>(); 
list.Add("s1"); 
list.Add("s2"); 
list.Add("s3"); 

Children = { 
    new Label{ 
    } 
} 

と同等です

List<string> list = new List<string>{ 
    "s1", 
    "s2", 
    "s3" 
}; 

Children.Add(new Label{ }); 
に相当します

しかし、このようなコレクションプロパティを初期化する方法についての公式文書はありませんが、コンパイラは表現を巧みに変換するようです。コンパイルしようとしたところ、正しく動作したようです。

あなたは、ここにhttps://dotnetfiddle.net/8jln93

+0

を参照してください。公式のドキュメントについては、[link](https:// UnholySheepのコメントにはmsdn.microsoft.com/en-us/library/bb384062.aspx)があります。 –

+0

そして、中括弧内のものはどのように機能しますか? '新しいラベル{ Horizo​​ntalTextAlignment = TextAlignment.Center、 Text =" Xamarinフォームへようこそ! " } ' –

+0

@PieterWitvoet公式文書では、初期化子を使用して新しいオブジェクトを作成する方法について説明していますが、読み込み専用のIListプロパティを初期化する方法については触れていませんが、' Children = new ... {' = {' –

関連する問題