Skip to content

Столбцы

Контрол TreeList поддерживает несколько столбцов данных, в то время как TreeView отображает значения в одном столбце.

treelist-treeview-columns

Столбец в контроле 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, чтобы указать пользовательские всплывающие подсказки для заголовков столбцов. Пользовательские всплывающие подсказки отображаются при наведении курсора на заголовки столбцов независимо от того, обрезан текст заголовка столбца или нет.

<mxdg:GridColumn FieldName="Position" HeaderToolTip="The job title or role of the employee"/>

grid-columnheadertooltip

Если столбцу не назначена пользовательская всплывающая подсказка, для заголовка столбца отображается всплывающая подсказка по умолчанию, если текст заголовка обрезан. Всплывающая подсказка по умолчанию отображает полный, необрезанный текст заголовка.

Смотрите также



* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.