Столбцы¶
Контрол TreeList поддерживает несколько столбцов данных, в то время как TreeView отображает значения в одном столбце.
Столбец в контроле TreeView¶
Контрол TreeView отображает данные в одном столбце. Этот столбец не может быть удален. Значения, отображаемые в столбце TreeView, извлекаются из поля/свойства, указанного элементом TreeViewControl.DataFieldName
.
Свойство TreeViewControl.CellWidth
позволяет вам настроить ширину этого столбца. Смотрите следующую ссылку для получения дополнительной информации: Ширина столбца .
Создание столбцов TreeList¶
Столбцы TreeList инкапсулируются классом TreeListColumn
, который является потомком класса ColumnBase
. Класс GridColumn
(столбец в DataGridControl
) также получен из ColumnBase
. Таким образом, столбцы в контролах DataGrid и TreeList совместно используют множество элементов API.
Контрол TreeList не создает автоматически столбцы после привязки контрола к источнику данных. Четыре подхода позволяют создавать столбцы:
-
Ручное создание колонок
Вы можете определить все столбцы TreeList вручную в коллекции
TreeList.Columns
(в XAML или code-behind). При таком подходе у вас есть доступ к созданным объектам столбца по имени в коде.В следующем примере создаются два столбца TreeList и настраивается формат отображения значений второго столбца:
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist" <mxtl:TreeListControl Name="treeList1" > <mxtl:TreeListControl.Columns> <mxtl:TreeListColumn Name="colName" FieldName="Name" /> <mxtl:TreeListColumn Name="colBirthdate" FieldName="Birthdate" > <mxtl:TreeListColumn.EditorProperties> <mxe:TextEditorProperties DisplayFormatString="yyyy-MM-dd"/> </mxtl:TreeListColumn.EditorProperties> </mxtl:TreeListColumn> </mxtl:TreeListControl.Columns> </mxtl:TreeListControl>
-
Автоматическое создание колонок
Включите опцию
TreeListControl.AutoGenerateColumns
, чтобы автоматически генерировать отсутствующие столбцы после привязки контрола к источнику данных. Вы можете применить определенные атрибуты (из пространств именSystem.ComponentModel
иSystem.ComponentModel.DataAnnotations
) к свойствам бизнес-объекта, чтобы управлять автоматической генерацией столбцов и настраивать свойства автоматически генерируемых столбцов (например, отображаемое имя столбца и порядок). Смотрите раздел Автоматическая генерация столбцов . -
Комбинирование ручного и автоматического способов создания колонок
Вы можете объединить два описанных выше подхода: создать необходимые столбцы вручную в коллекции
TreeList.Columns
, а затем включить опциюTreeListControl.AutoGenerateColumns
, чтобы делегировать генерацию других столбцов в TreeList. -
Создание колонок из View Model
TreeList может создавать столбцы из источника столбцов, определенного в модели представления. В этом сценарии используйте свойства
ColumnsSource
иColumnTemplate
. Смотрите раздел Создание столбцов из модели представления .
Привязка столбцов к данным¶
Свойство TreeListColumn.FieldName
позволяет привязать столбец к полю в таблице нижележащих данных или к публичному свойству бизнес-объекта. Как только столбец привязан, он извлекает значения из источника данных.
TreeList также позволяет вам создавать несвязанные столбцы, значения которых следует вводить вручную, с помощью события TreeListControl.CustomUnboundColumnData
. Смотрите Несвязанные столбцы для получения дополнительной информации.
Не рекомендуется привязывать несколько столбцов TreeList к одному и тому же полю данных/свойству.
В следующем примере создаются столбцы TreeList и привязываются к ним данные.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
<mxtl:TreeListControl Grid.Column="3" Width="200" Name="treeListUnbound"
HorizontalAlignment="Stretch">
<mxtl:TreeListControl.Columns>
<mxtl:TreeListColumn Name="colFirstName" FieldName="FirstName"
Header="First Name" Width="*" AllowSorting="False" />
<mxtl:TreeListColumn Name="colLastName" FieldName="LastName"
Header="Last Name" Width="*"/>
<mxtl:TreeListColumn Name="colCity" FieldName="City"
Header="City" Width="*" ReadOnly="True" />
<mxtl:TreeListColumn Name="colPhone" FieldName="Phone"
Header="Phone" Width="*"/>
</mxtl:TreeListControl.Columns>
</mxtl:TreeListControl>
using Eremex.AvaloniaUI.Controls.TreeList;
TreeListColumn colFirstName = new TreeListColumn()
{
FieldName = "FirstName", Header = "First Name", AllowSorting = false,
Width= new GridLength(1, GridUnitType.Star)
};
treeList1.Columns.Add(colFirstName);
Автоматическое формирование столбцов¶
Установите для свойства AutoGenerateColumns
значение true
(значение по умолчанию - false
), чтобы включить автоматическую генерацию столбцов для свойств в источнике данных. Когда для AutoGenerateColumns
установлено значение true
, контрол TreeList извлекает публичные свойства из источника данных, генерирует столбцы и привязывает их к свойствам. Если коллекция Columns
контрола уже содержит столбец, привязанный к определенному свойству/полю, автоматически не генерируется дополнительный столбец, привязанный к тому же свойству/полю.
События AutoGeneratingColumn
и AutoGeneratedColumns
позволяют настраивать автоматически сгенерированные столбцы. Событие AutoGeneratingColumn
срабатывает, когда автоматически сгенерированный столбец собирается быть добавленным в коллекцию Columns
. Событие позволяет вам предотвратить добавление столбца в коллекцию.
Событие AutoGeneratedColumns
срабатывает после того, как все столбцы были автоматически сгенерированы.
Когда вы назначаете контролу другой источник данных, TreeList сначала удаляет столбцы, которые ранее были сгенерированы автоматически, а затем автоматически генерирует столбцы для нового источника данных.
Используйте атрибуты для настройки свойств автоматически генерируемых столбцов¶
Вы можете применить определенные атрибуты (из пространств имен System.ComponentModel
и System.ComponentModel.DataAnnotations
) к свойствам бизнес-объекта (записи источника данных), чтобы настроить статус видимости, вид и свойства поведения для соответствующих автоматически сгенерированных столбцов TreeList. Поддерживаются следующие атрибуты:
Атрибут Browsable
¶
Атрибут System.ComponentModel.BrowsableAttribute
контролирует автоматическую генерацию столбца. Примените атрибут Browsable(false) к определенным свойствам, чтобы предотвратить автоматическое создание соответствующих столбцов.
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: Browsable(false)]
public int serviceId = "";
}
Атрибут System.ComponentModel.BrowsableAttribute
эквивалентен использованию атрибута System.ComponentModel.DataAnnotations.DisplayAttribute
с параметром AutoGenerateField
.
Атрибут Display
¶
System.ComponentModel.DataAnnotations.DisplayAttribute
- это атрибут общего назначения, который контролирует автоматическую генерацию столбцов и свойства отображения автоматически сгенерированных столбцов. Атрибут имеет следующие параметры, поддерживаемые контролом TreeList:
-
AutoGenerateField
— Указывает, следует ли автоматически генерировать соответствующий столбец. -
Order
— Указывает видимую позицию автоматически сгенерированного столбца (ColumnBase.VisibleIndex
). -
Name
— Указывает заголовок автоматически сгенерированного столбца (ColumnBase.Header
). -
ShortName
— эквивалентен параметруName
. -
GroupName
— Указывает название диапазона, который будет привязан к автоматически сгенерированному столбцу. Это значение атрибута используется для инициализации свойстваTreeListColumn.BandName
, если опциейTreeListControl.AutoGenerateBands
являетсяtrue
(по умолчанию).Когда Tree List встречает
DisplayAttribute.GroupName
, он проверяет наличие существующего диапазона с соответствующим именем (TreeListBand.BandName
). Если такового не существует, контрол автоматически создает диапазон и инициализирует его свойствоTreeListBand.BandName
значениемDisplayAttribute.GroupName
.Параметр
DisplayAttribute.GroupName
также поддерживает вложенные диапазоны. Используйте символ "/" для разделения родительского и дочернего диапазонов (например, "ParentBandName/ChildBandName"). Чтобы включить '/' в качестве литерала, используйте "//".
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel.DataAnnotations;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: Display(Name = "Birth date", Order=2, GroupName="General")]
public DateTime? birthdate = null;
[ObservableProperty]
[property: Display(GroupName = "Details/Address")]
public string country { get; set; }
[ObservableProperty]
[property: Display(GroupName = "Details/Contact")]
public string phone { get; set; }
}
Атрибут DisplayName
¶
Атрибут System.ComponentModel.DisplayNameAttribute
позволяет вам инициализировать заголовок автоматически сгенерированного столбца (ColumnBase.Header
).
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: DisplayName("Birth date")]
public DateTime? birthdate = null;
}
Атрибут System.ComponentModel.DisplayNameAttribute
эквивалентен использованию атрибута System.ComponentModel.DataAnnotations.DisplayAttribute
с параметром Name
или ShortName
.
Атрибут Editable
¶
Атрибут System.ComponentModel.EditableAttribute
, примененный к свойству, создает недоступный для редактирования столбец. Пользователи не могут открывать встроенные редакторы и, таким образом, выделять и копировать текст.
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: Editable(false)]
public int parentId = -1;
}
Атрибут Readonly
¶
Атрибут System.ComponentModel.ReadonlyAttribute
, применяемый к свойству, создает столбец, доступный только для чтения. Пользователи могут выделять и копировать текст в столбцах, доступных только для чтения, но не редактировать значения.
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[property: ReadOnly(true)]
public int id = -1;
}
Создание столбцов из модели представления¶
Вы можете заполнить контрол TreeList столбцами из источника столбцов, определенного в модели представления. Источник столбца - это коллекция бизнес-объектов, из которых генерируются объекты TreeListColumn
в соответствии с указанным шаблоном. Следующие элементы API поддерживают генерацию столбцов из модели представления:
-
TreeListControl.ColumnsSource
— Коллекция бизнес-объектов, используемая для создания столбцов TreeList в соответствии с шаблономColumnTemplate
. -
TreeListControl.ColumnTemplate
— Шаблон, который инициализирует объектTreeListColumn
из бизнес-объектов, хранящихся в источнике столбцов.
Перемещение столбцов¶
Используйте свойство TreeListColumn.VisibleIndex
, чтобы указать визуальную позицию столбца. Чтобы скрыть столбец, установите для его свойства TreeListColumn.VisibleIndex
значение -1 или установите для свойства IsVisible
значение false
.
Дефолтное поведение контрола позволяет пользователю переупорядочивать столбцы. Используйте следующие свойства, чтобы запретить перемещение столбца:
TreeListControl.AllowColumnMoving
— Указывает, может ли пользователь перемещать любой столбец.TreeListColumn.AllowMoving
— Указывает, может ли пользователь перемещать определенный столбец.
Ширина столбца¶
Для контролировать ширину столбца в контролах TreeList и TreeView можно использовать следующие свойства::
TreeList settings:
TreeListColumn.Width
— Ширина столбца, указанная как значениеGridLength
.TreeListColumn.MinWidth
— Минимальная ширина столбца.TreeListColumn.MaxWidth
— Максимальная ширина столбца.
TreeView settings:
TreeViewControl.CellWidth
- Ширина ячеек контрола, указанная как значениеGridLength
.
Свойства TreeListColumn.Width
и TreeViewControl.CellWidth
относятся к типу GridLength
. Тип GridLength
позволяет вам установить ширину столбца равной:
- Фиксированная ширина (количество пикселей).
- Взвешенная доля доступного пространства (обозначение star).
- Значение
Auto
— Активирует автоматическое вычисление ширины столбца, подгоняя его под содержимое ячеек. Когда пользователь прокручивает контрол по вертикали, контрол может увеличить ширину столбца, подгоняя новые значения ячеек, появившиеся во время операции прокрутки.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
<mxtl:TreeListControl Name="treeList1">
<mxtl:TreeListControl.Columns>
<mxtl:TreeListColumn Name="colFirstName"
FieldName="FirstName" Header="First Name" Width="*"/>
<mxtl:TreeListColumn Name="colLastName"
FieldName="LastName" Header="Last Name" Width="2*"/>
<mxtl:TreeListColumn Name="colPhone"
FieldName="Phone" Header="Phone" Width="*"/>
</mxtl:TreeListControl.Columns>
</mxtl:TreeListControl>
Следующие свойства контролируют операции изменения размера столбцов, выполняемые пользователями.
TreeListControl.AllowColumnResizing
— Указывает, может ли пользователь изменять размер любого столбца.TreeListColumn.AllowResizing
— Указывает, может ли пользователь изменять размер определенного столбца.
Заголовки столбцов¶
Заголовки столбцов TreeList отображаются на панели заголовков. Вы можете скрыть эту панель с помощью свойства TreeListControl.ShowColumnHeaders
.
Высота панели автоматически регулируется в подогнанном под содержимое заголовков столбцов. Используйте свойство HeaderPanelMinHeight
, чтобы ограничить минимальную высоту панели.
Заголовок столбца изначально отображает заголовок (текстовую метку), который является текстовым представлением свойства ColumnBase.Header
. Если свойство ColumnBase.Header
не задано, заголовок столбца генерируется из имени поля столбца (ColumnBase.FieldName
).
Используйте свойство ColumnBase.HeaderTemplate
, чтобы указать шаблон, используемый для отображения заголовка столбца. Шаблон позволяет отображать картинки и пользовательские контролы, а также отображать текст произвольным способом.
Следующий код отображает картинку перед заголовком столбца. Выражение <TextBlock Text="{Binding}">
отображает содержимое свойства Header
столбца:
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
<mxtl:TreeListControl Name="treeList" HeaderPanelMinHeight="50">
<mxtl:TreeListColumn FieldName="Number" Header="Position"
HeaderVerticalAlignment="Bottom">
<mxtl:TreeListColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="/info24x24.png" Width="24"
Height="24" Margin="0,0,5,0"/>
<TextBlock Text="{Binding}" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</mxtl:TreeListColumn.HeaderTemplate>
</mxtl:TreeListColumn>
</mxtl:TreeListControl>
Используйте свойства ColumnBase.HeaderHorizontalAlignment
и ColumnBase.HeaderVerticalAlignment
, чтобы выровнять содержимое заголовка столбца по горизонтали и вертикали.
Сортировка по столбцам¶
Пользователь может щелкнуть заголовок столбца или использовать контекстное меню заголовка столбца, чтобы отсортировать TreeList по столбцу. Дополнительную информацию смотрите в разделе Сортировка данных .
Значения в столбцах¶
Чтобы узнать, как извлекать значения ячеек для определенных узлов, смотрите раздел Узлы .
Всплывающие подсказки в заголовке столбца¶
Используйте свойство HeaderToolTip
, чтобы указать пользовательские всплывающие подсказки для заголовков столбцов. Пользовательские всплывающие подсказки отображаются при наведении курсора на заголовки столбцов независимо от того, обрезан текст заголовка столбца или нет.
Если столбцу не назначена пользовательская всплывающая подсказка, для заголовка столбца отображается всплывающая подсказка по умолчанию, если текст заголовка обрезан. Всплывающая подсказка по умолчанию отображает полный, необрезанный текст заголовка.
Смотрите также¶
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.