Обзор панелей
Элементы Panel - это компоненты, которые управляют отрисовкой элементов - их размером и габаритами, их позицией и расположением их дочернего содержимого. Avalonia UI предоставляет ряд предопределенных элементов Panel, а также возможность создавать пользовательские элементы Panel.
Класс Panel
Panel является базовым классом для всех элементов, обеспечивающих поддержку макета в Avalonia. Производные элементы Panel используются для позиционирования и размещения элементов в XAML и коде.
Avalonia включает комплексный набор производных реализаций панелей, которые позволяют создавать множество сложных макетов. Эти производные классы предоставляют свойства и методы, обеспечивающие реализацию большинства стандартных сценариев пользовательского интерфейса. Разработчики, не сумевшие найти поведение размещения дочерних элементов, соответствующее их потребностям, могут создавать новые макеты, переопределяя методы ArrangeOverride и MeasureOverride. Для получения дополнительной информации о пользовательском поведении макета см. Создание пользовательской панели.
Общие члены Panel
Все элементы Panel поддерживают базовые свойства размера и позиционирования, определенные Control, включая Height, Width, HorizontalAlignment, VerticalAlignment и Margin. Для получения дополнительной информации о свойствах пози ционирования, определенных Control, см. Обзор выравнивания, полей и отступов.
Panel предоставляет дополнительные свойства, имеющие решающее значение для понимания и использования макета. Свойство Background используется для заполнения области между границами производного элемента панели с помощью Brush. Children представляет коллекцию дочерних элементов, из которых состоит Panel.
Присоединенные свойства
Производные элементы панели широко используют присоединенные свойства. Присоединенное свойство — это специализированная форма свойства зависимости, которая не имеет обычной «обертки» свойства CLR (common language runtime). Присоединенные свойства имеют специализированный синтаксис в XAML, который можно увидеть в нескольких примерах ниже.
Одно из назначений присоединенного свойства — позволить дочерним элементам хранить уникальные значения свойства, которое фактически определено родительским элементом. Применение этой функциональности заключается в том, что дочерние элементы информируют родителя о том, как они хотели бы быть представлены в пользовательском интерфейсе, что чрезвычайно полезно для макета приложения.
Панели пользовательского интерфейса
В Avalonia доступно несколько классов панелей, оптимизированных для поддержки сценариев пользовательского интерфейса: Panel, Canvas, DockPanel, Grid, StackPanel, WrapPanel и RelativePanel. Эти элементы панели просты в использовании, универсальны и достаточно расширяемы для большинства приложений.
Canvas
Элемент Canvas позволяет позиционировать содержимое в соответствии с абсолютными координатами x и y. Элементы могут быть отрисованы в уникальном местоположении; или, если элементы занимают одни и те же координаты, порядок, в котором они появляются в разметке, определяет порядок, в котором элементы отрисовываются.
Canvas обеспечивает наиболее гибкую поддержку макета среди всех Panel. Свойства Height и Width используются для определения области холста, а элементам внутри назначаются абсолютные координаты относительно области родительского Canvas. Четыре присоединенных свойства, Canvas.Left, Canvas.Top, Canvas.Right и Canvas.Bottom, обеспечивают точный контроль размещения объектов в пределах Canvas, позволяя разработчику точно позиционировать и располагать элементы на экране.
ClipToBounds в Canvas
Canvas может размещать дочерние элементы в любом положении на экране, даже в координатах, которые находятся за пределами его собственных определенных Height и Width. Кроме того, на Canvas не влияет размер его дочерних элементов. В результате дочерний элемент может перерисовать другие элементы за пределами ограничивающего прямоугольника родительского Canvas. По умолчанию Canvas позволяет дочерним элементам отрисовываться за пределами границ родительского Canvas. Если такое поведение нежелательно, свойство ClipToBounds можно установить в значение true. Это заставляет Canvas обрезать содержимое до своего собственного размера. Canvas — единственный элемент макета, который позволяет дочерним элементам отрисовываться за пределами своих границ.
Определение и использование Canvas
Canvas можно создать, просто используя XAML или код. Следующий пример демонстрирует, как использовать Canvas для абсолютного позиционирования содержимого. Этот код создает три квадрата размером 100 пикселей. Первый квадрат красный, и его верхняя левая позиция (x, y) указана как (0, 0). Второй квадрат зеленый, и его верхняя левая позиция — (100, 100), чуть ниже и правее первого квадрата. Третий квадрат синий, и его верхняя левая позиция — (50, 50), таким образом, он охватывает нижний правый квадрант первого квадрата и верхний левый квадрант второго. Поскольку третий квадрат размещается последним, он появляется поверх двух других квадратов, то есть перекрывающиеся части принимают цвет третьего квадрата.
- XAML
- C#
<Canvas Height="400" Width="400">
<Canvas Height="100" Width="100" Top="0" Left="0" Background="Red"/>
<Canvas Height="100" Width="100" Top="100" Left="100" Background="Green"/>
<Canvas Height="100" Width="100" Top="50" Left="50" Background="Blue"/>
</Canvas>
// Create the Canvas
myParentCanvas = new Canvas();
myParentCanvas.Width = 400;
myParentCanvas.Height = 400;
// Define child Canvas elements
myCanvas1 = new Canvas();
myCanvas1.Background = Brushes.Red;
myCanvas1.Height = 100;
myCanvas1.Width = 100;
Canvas.SetTop(myCanvas1, 0);
Canvas.SetLeft(myCanvas1, 0);
myCanvas2 = new Canvas();
myCanvas2.Background = Brushes.Green;
myCanvas2.Height = 100;
myCanvas2.Width = 100;
Canvas.SetTop(myCanvas2, 100);
Canvas.SetLeft(myCanvas2, 100);
myCanvas3 = new Canvas();
myCanvas3.Background = Brushes.Blue;
myCanvas3.Height = 100;
myCanvas3.Width = 100;
Canvas.SetTop(myCanvas3, 50);
Canvas.SetLeft(myCanvas3, 50);
// Add child elements to the Canvas' Children collection
myParentCanvas.Children.Add(myCanvas1);
myParentCanvas.Children.Add(myCanvas2);
myParentCanvas.Children.Add(myCanvas3);
DockPanel
Элемент DockPanel использует присоединенное свойство DockPanel.Dock, установленное в дочерних элементах содержимого, для позиционирования содержимого вдоль краев контейнера. Когда DockPanel.Dock установлен в Top или Bottom, он располагает дочерние элементы выше или ниже друг друга. Когда DockPanel.Dock установлен в Left или Right, он располагает дочерние элементы слева или справа друг от друга. Свойство LastChildFill определяет положение последнего элемента, добавленного в качестве дочернего элемента DockPanel.
Вы можете использовать DockPanel для позиционирования группы связанных элементов, таких как набор кнопок. Или вы можете использовать его для создания «панельного» пользовательского интерфейса.