Столбцы
Контрол TreeList поддерживает несколько столбцов данных, в то время как TreeView отображает значения в одном столбце.
Столбец в контроле TreeView
Вам не нужно создавать столбец в TreeView контроле. Вам нужно только установить свойство TreeViewControl.DataFieldName
, чтобы указать имя поля источника данных или публичного свойства, значения которого отображаются контролом.
Столбцы в контроле TreeList
Столбцы TreeList инкапсулируются объектами TreeListColumn
, которые являются потомками класса ColumnBase
.
Контрол не создает автоматически столбцы после привязки контрола к источнику данных. Три подхода позволяют создавать столбцы:
Создайте все столбцы TreeList вручную в коллекции
TreeList.Columns
(в XAML или code-behind). При таком подходе у вас есть доступ к созданным объектам столбца по имени в коде.Включите опцию
TreeListControl.AutoGenerateColumns
, чтобы автоматически генерировать отсутствующие столбцы после привязки контрола к источнику данных. Вы можете применить определенные атрибуты (из пространств именSystem.ComponentModel
иSystem.ComponentModel.DataAnnotations
) к свойствам бизнес-объекта, чтобы управлять автоматической генерацией столбцов и настраивать свойства автоматически генерируемых столбцов (например, отображаемое имя столбца и порядок).Комбинация двух описанных выше подходов: создайте необходимые столбцы вручную в коллекции
TreeList.Columns
, а затем включите опциюTreeListControl.AutoGenerateColumns
, чтобы делегировать генерацию других столбцов в TreeList.
В следующем примере создаются два столбца TreeList и настраивается формат отображения значений второго столбца:
xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"
<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>
Смотрите Автоматическая генерация столбцов для получения информации об автоматически сгенерированных столбцах.
Привязка столбцов к данным
Свойство TreeListColumn.FieldName
позволяет привязать столбец к полю в таблице нижележащих данных или к публичному свойству бизнес-объекта. Как только столбец привязан, он извлекает значения из источника данных.
TreeList также позволяет вам создавать несвязанные столбцы, значения которых следует вводить вручную, с помощью события TreeListControl.CustomUnboundColumnData
. Смотрите Несвязанные столбцы для получения дополнительной информации.
Не рекомендуется привязывать несколько столбцов TreeList к одному и тому же полю данных/свойству.
В следующем примере создаются столбцы TreeList и привязываются к ним данные.
xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"
<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
.
using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel.DataAnnotations;
public partial class MyBusinessObject : ObservableObject
{
[ObservableProperty]
[Display(Name = "Birth date", Order=2)]
public DateTime? birthdate = null;
}
Атрибут 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;
}
Перемещение столбцов
Используйте свойство TreeListColumn.VisibleIndex
, чтобы указать визуальную позицию столбца. Чтобы скрыть столбец, установите для его свойства TreeListColumn.VisibleIndex
значение -1 или установите для свойства IsVisible
значение false
.
Пользователь может переставлять столбцы по умолчанию. Следующие свойства позволяют запретить перемещение столбца:
TreeListControl.AllowColumnMoving
— Указывает, может ли пользователь перемещать любой столбец.TreeListColumn.AllowMoving
— Указывает, может ли пользователь перемещать определенный столбец.
Изменение размера столбцов
Чтобы контролировать ширину столбца в TreeList, вы можете использовать следующие свойства:
TreeListColumn.Width
— Ширина столбца, указанная как значениеGridLength
.TreeListColumn.MinWidth
— Минимальная ширина столбца.TreeListColumn.MaxWidth
— Максимальная ширина столбца.
Свойство Width
относится к типу GridLength
. Это позволяет вам установить ширину столбца равной:
- Фиксированная ширина (количество пикселей).
- Взвешенная доля доступного пространства (обозначение star).
- Значение "Автоматически" — активирует автоматическое вычисление ширины столбца, подогнанное под заголовок столбца и видимые значения. Когда пользователь прокручивает контрол по вертикали, контрол может увеличить ширину столбца, подгоняя новые значения ячеек, появившиеся во время операции прокрутки.
xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"
<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.HeaderContentTemplate
, чтобы указать шаблон, используемый для отображения заголовка столбца. Шаблон позволяет отображать картинки и пользовательские контролы, а также отображать текст произвольным способом.
Следующий код отображает картинку перед заголовком столбца. Выражение <TextBlock Text="{Binding}">
отображает содержимое свойства Header
столбца:
xmlns:mxtl="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList;assembly=Eremex.Avalonia.Controls"
<mxtl:TreeListControl Name="treeList" HeaderPanelMinHeight="50">
<mxtl:TreeListColumn FieldName="Number" Header="Position" HeaderVerticalContentAlignment="Bottom">
<mxtl:TreeListColumn.HeaderContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="/info24x24.png" Width="24" Height="24" Margin="0,0,5,0"></Image>
<TextBlock Text="{Binding}" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</mxtl:TreeListColumn.HeaderContentTemplate>
</mxtl:TreeListColumn>
</mxtl:TreeListControl>
Используйте свойства ColumnBase.HeaderHorizontalContentAlignment
и ColumnBase.HeaderVerticalContentAlignment
, чтобы выровнять содержимое заголовка столбца по горизонтали и вертикали.
Сортировка столбцов
Пользователь может щелкнуть заголовок столбца или использовать контекстное меню заголовка столбца, чтобы отсортировать TreeList по столбцу. Смотрите Сортировка данных для получения дополнительной информации.
Значения в столбцах
Чтобы узнать, как извлекать значения ячеек для определенных узлов, смотрите Узлы .
Смотрите также
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.