GTK #

2017-12-11 4 views
1

에서 동적 폼 생성을위한 스태킹 위젯 지금은 XML 파일을 기반으로 위젯을 동적으로 생성하는 .NET Mono GTK # 응용 프로그램을 개발 중입니다. 그래서 위젯을 여러개 쌓아 올릴 필요가 있습니다. 나는 VBox를 사용해 보았지만 (수평으로 늘리려면 위젯이 필요함) 위젯이 수직으로 늘어나는 것을 원하지 않는다.GTK #

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가 실제로 사용해야하는 것은 아니지만이 방법을 수행하는 방법을 모르겠습니다. 그래서 나는 어떤 도움을 요청하고있다.

추신 : 또 다른 것 (얼마나 많은 위젯이 있을지 모르겠다 ... 너무 많으면 스크롤바를 사용하여 패널을 스크롤하고 싶다. , 이것에 약간 도움은 또한 평가 될 것입니다.) 대단히 감사합니다.

+0

그냥 VBox 대신 Fixed를 사용하고 X/Y 및 추가하려는 하위 위젯의 WidthRequest 및 HeightRequest를 사용하여 간단하게 레이아웃을 사용할 수 있습니다 – 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); 

이렇게하면 작동합니다. 그냥 모두 알게;)

관련 문제