Персональный сайт Александра Тауениса » Контейнеры Xwt VBox и HBox

Контейнеры Xwt VBox и HBox

В библиотеке абстракции от интерфейсов ОС XWT для размещения элементов управления на форме используются промежуточные классы — Box’ы, Canvas’ы и Paned’ы, возможно ещё есть какие-то другие. В данной статье рассматриваются контейнеры VBox и HBox.

Данные контейнеры предназначены для вывода элементов управления в виде последовательного списка. Оба контейнера, VBox и HBox, основаны на основном классе Xwt.Box, поэтому они практически одинаковы в использовании. Главное отличие в том, что VBox выравнивает элементы управления вертикально, сверху вниз, а его собрат горизонтально слева направо.

Итак, попробуем сделать простейшую форму с VBox. План на сегодня: создать форму Xwt, создать экземпляр VBox, какие-то элементы управления, добавить их на VBox, и затем добавить сам контейнер на форму.
static void Main()
{//инициализация xwt и создание формы
Xwt.Application.Initialize(Xwt.ToolkitType.Wpf);
Xwt.Window MainWindow = new Xwt.Window()
{
Title = "Xwt Test"
};
MainWindow.CloseRequested += (o, e) =>
{
Xwt.Application.Exit();
};
Xwt.Box box = new Xwt.VBox();//инициализация vbox
//создание элементов управления
Xwt.TextEntry txt = new Xwt.TextEntry(){Text = "This is a Xwt textbox"};
Xwt.CheckBox chk = new Xwt.CheckBox("This is a Xwt checkbox");
Xwt.Button btn = new Xwt.Button("This is a Wwt button");
//заполнение контейнера
box.PackStart(txt);
box.PackStart(chk);
box.PackStart(btn);
//добавление контейнера на форму и её вывод
MainWindow.Content = box;
MainWindow.Show();
Xwt.Application.Run();
}

Как видите, всё проще, чем Вы думали. Элементы управления тупо «упаковываются» в контейнер при помощи подпрограммы PackStart или PackEnd. Первая добавляет элементы сверху вниз, вторая снизу вверх. По умолчанию, при изменении размера формы, элементы управления будут растягиваться вместе с ней. Это можно изменить, добавив ещё два аргумента к вызову PackStart/PackEnd. Первый параметр подпрограммы регулирует растяжку по оси, противоположной «ходу» Box’а, второй по оси, параллельной «ходу» Boxa. То есть, у вертикального контейнера VBox первый параметр регулирует растяжку по горизонтали, а второй по вертикали.

Это был первый вариант вызова PackStart. Второй же заключается в подробном указании поведения упакованного элемента при изменениях размеров формы: PackStart(что упаковывать,неизвестный булевый параметр,Xwt.WidgetPlacement.как,Xwt.WidgetPlacement.как). Указывая значение последних двух аргументов, можно управлять поведением размеров элемента управления в обеих плоскостях при изменении размеров формы. Значение «неизвестного булевого аргумента» я распознать так и не смог, реакции на его изменение я не обнаружил. Если кто знает, может сообщить в комментариях. 🙂

И третий вариант, самый навороченный — указание и способа размещения, и отступов от соседних элементов или краёв формы. Для этого к второму варианту добавляют ещё от 1 до четырёх аргументов (double), обозначающих отступ. Следует заметить, что по синтаксису PackStart и PackEnd идентичны.

Наконец, я раскрою того самого собрата VBox, вокруг-да-около которого я ходил всю статью. Это контейнер HBox, работающий аналогично VBox, но располагающего элементы на форме по горизонтали. Попробуйте заменить Xwt.Box box = new Xwt.VBox(); на Xwt.Box box = new Xwt.HBox(); и всё увидите.

Если есть необходимость табличной разметки и нет желания использовать Xwt.Table 😉 , можно в контейнер упаковывать другие контейнеры. Результат будет аналогичный, можно строить диалоговые окна.



Оставить комментарий

Защита от спама * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.