2017-12-11 9 views
1

は、今私は、動的にXMLファイルに基づいて、そのウィジェットを生成.NETモノGTK#アプリケーションを開発しています。だから私はウィジェットをたくさん積み重ねる必要があります。 (私は水平にストレッチするウィジェットを必要として)私はVBoxのを使用してみましたが、私はウィジェットが垂直方向にストレッチする必要はありません。このコードではスタッキングウィジェットは

void BuildObjectProperties(Container parent, List<ObjectProperty> objectProperties) 
{ 
    var verticalBox = new VBox(false, 0); 
    foreach (var objectProperty in objectProperties) 
    { 
     BuildObjectProperty(verticalBox, objectProperty); 
    } 
    parent.Add(verticalBox); 
} 

void BuildObjectProperty(Container parent, ObjectProperty objectProperty) 
{ 
    switch (objectProperty.Type) 
    { 
     case PropertyType.Text: 
      parent.Add(new Entry()); 
      break; 
     case PropertyType.Number: 
      parent.Add(new SpinButton(0,10,1)); 
      break; 
     case PropertyType.Note: 
      parent.Add(new TextView()); 
      break; 
     case PropertyType.List: 
      parent.Add(new TreeView()); 
      break; 
     case PropertyType.Enum: 
      parent.Add(new ComboBox()); 
      break; 
     case PropertyType.Reference: 
      parent.Add(new ComboBox()); 
      break; 
    } 
} 

ウィジェットを作成して、コメントを追加しますが(たとえば、10pxのを)彼らはすべてのフレームに均等分布を持っている(彼らは遠く離れている)、私はそれらの間の距離が一定になりたかった取得も私が望んでいましたスクリーン上に存在するウィジェットの数にもかかわらず、その高さは固定されます。

たぶんVBOXは、私が使用してすべきか、本当にありませんが、私は本当にこの他の方法を行う方法がわかりません。だから私はいくつかの助けを求めています:)

PS:もう一つの(私はパネルをスクロールするスクロールバーを持っていると思ったあまりにも多くがあるので、もし...があるでしょうどのように多くのウィジェットがわかりません、これについての助けもありがたいでしょう。)ありがとうございました。

+0

);ちょうどあなたがすべて知っているようにします – muszeo

答えて

1

私はちょうど私のコードで問題だったものを発見し、私は解決策を思い付きました。私は単純なAddメソッドの代わりにPackStartを使用しました。

 Widget widget = null; 
     switch (objectProperty.Type) 
     { 
      case PropertyType.Text: 
       widget = new TextField(objectProperty.Name); 
       break; 
      case PropertyType.Number: 
       widget = new SpinnerField(objectProperty.Name); 
       break; 
      case PropertyType.Note: 
       widget = new NoteField(objectProperty.Name) { HeightRequest = 80 }; 
       break; 
      case PropertyType.List: 
       widget = new ListField(objectProperty.Name) { HeightRequest = 100 }; ; 
       break; 
      case PropertyType.Enum: 
       widget = new ComboField(objectProperty.Name); 
       break; 
      case PropertyType.Reference: 
       widget = new ComboField(objectProperty.Name); 
       break; 
     } 
     parent.PackStart(widget, false, true, 8); 

このように動作します。あなたが追加されているウィジェットだけで固定の代わりにVBoxのを使用して、単純に子供のX/YとWidthRequestとHeightRequestを使用してレイアウトすることができる