Узлы¶
Класс TreeListNode
инкапсулирует узел в контролах TreeList и TreeView.
Узел TreeView отображает одно значение, в то время как узел TreeList может отображать несколько значений (по значению для каждого столбца).
Создание узлов и доступ к ним¶
В режиме привязки контролы TreeList и TreeView автоматически создают узлы для всех элементов источника данных. Вы можете получить доступ к созданным узлам, используя следующие свойства:
TreeListControlBase.Nodes
— Корневые узлы.TreeListNode.Nodes
— Дочерние узлы узла.
Вам нужно создавать узлы вручную, когда контрол находится в несвязанном режиме .
Смотрите также: Поиск узлов .
Получение и установка значений узлов¶
Свойство TreeListNode.Content
определяет нижележащий объект данных узла. Вы можете ввести значение этого свойства в свой бизнес-объект, а затем прочитать отдельные значения.
В несвязанном режиме вы можете вручную присвоить объекту свойство TreeListNode.Content
. Не присваивайте объекты TreeListNode.Content
в связанном режиме.
Чтобы получить и задать значения отдельных ячеек, вы можете использовать следующие методы:
GetCellValue
иGetCellDisplayText
SetCellValue
Сфокусированный узел¶
Используйте свойство TreeListControlBase.FocusedNode
для доступа к узлу, который в данный момент находится в фокусе (узлу, который получает события с клавиатуры). Чтобы получить объект данных (бизнес) этого узла, используйте унаследованное свойство DataControlBase.FocusedItem
.
Событие TreeListControlBase.FocusedNodeChanged
позволяет вам реагировать на перемещение фокуса между узлами.
Смотрите также: Выбор нескольких узлов (выделение) .
Узловые картинки¶
Контролы TreeList и TreeView поддерживают картинки узлов. Эти картинки отображаются перед значениями ячеек в столбце иерархии (первый столбец, по умолчанию).
Установите для свойства TreeListControlBase.ShowNodeImages
значение true
, чтобы включить картинки узлов.
Следующие подходы позволяют вам предоставлять картинки узлов:
-
Используйте свойство
TreeListControlBase.NodeImageFieldName
, чтобы указать свойство (поле) бизнес-объекта, которое возвращает картинку узла (объектIImage
). -
Используйте свойство
TreeListControlBase.NodeImageSelector
, чтобы указать селектор (объектITreeListNodeImageSelector
), который возвращает картинки узлов для определенных узлов. -
В несвязанном режиме вы можете задать картинку узла, используя свойство
TreeListNode.Image
.
Пример¶
Следующий код отображает картинки для узлов, которые имеют определенное значение ячейки.
В примере создается объект NodeImageSelector
, который возвращает картинки в соответствии со свойством OnVacation бизнес-объекта.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
<Grid.Resources>
<local:MyNodeImageSelector x:Key="myNodeImageSelector" />
...
</Grid.Resources>
<mxtl:TreeListControl
Grid.Column="0" Grid.Row="1" Name="treeList2"
ChildrenSelector="{StaticResource mySelector}"
ItemsSource="{Binding Employees}"
NodeImageSelector="{StaticResource myNodeImageSelector}"
ShowNodeImages="True"
>
...
</mxtl:TreeListControl>
using Avalonia.Media.Imaging;
using Avalonia.Platform;
public class MyNodeImageSelector : ITreeListNodeImageSelector
{
IImage onVacationImage;
IImage defaultImage;
public MyNodeImageSelector()
{
onVacationImage = new Bitmap(AssetLoader.Open(
new Uri("avares://AvaloniaApp1/Assets/plane.png")));
defaultImage = null;
}
public IImage SelectImage(TreeListNode node)
{
Employee row = node.Content as Employee;
return row.OnVacation? onVacationImage: defaultImage;
}
}
Разворачивать и сворачивать узлы¶
Пользователь может разворачивать и сворачивать узлы, у которых есть дочерние узлы, следующим образом:
- Щелкните по узлу развернуть кнопки
- Нажмите клавиши "+" и "-" на клавиатуре
Вы можете скрыть кнопки расширения узла с помощью свойства TreeListControlBase.ShowExpandButtons
. В этом случае узлы могут быть развернуты и свернуты только в коде и с клавиатуры.
В коде вы можете контролировать распахивание узла с помощью следующих элементов API:
TreeListControlBase.AutoExpandAllNodes
— Указывает, следует ли автоматически распахивать узлы при загрузке.TreeListControlBase.CollapseAllNodes
— Сворачивает все узлы.TreeListControlBase.ExpandAllNodes
— Расширяет все узлы.-
TreeListControlBase.ExpandNodesOnFiltering
— Указывает, следует ли выполнять поиск в свернутых узлах во время поиска/фильтрации данных и автоматически разворачивать их, когда их дочерние узлы соответствуют текущим критериям фильтрации/поиска. Контролы TreeList и TreeView выполняют поиск только по загруженным в данный момент узлам. Для иерархических источников данных вы можете установить для свойстваAllowDynamicDataLoading
значениеfalse
, чтобы отключить динамическую загрузку узлов и загрузить все узлы одновременно. -
TreeListNode.IsExpanded
— Позволяет развернуть/свернуть отдельный узел или получить его развернутое состояние.
Логическое свойство/поле в источнике объекта контрола (DataControlBase.ItemsSource
) может хранить расширенные состояния узлов. Используйте свойство TreeListControlBase.ExpandStateFieldName
, чтобы указать это свойство. Как только это свойство установлено, расширенные состояния узлов синхронизируются со значениями, хранящимися в этом свойстве в источнике объекта.
При развертывании и сворачивании узлов возникают следующие события:
TreeListControlBase.NodeExpanding
— Срабатывает, когда узел собирается распахиваться. Вы можете использовать параметр событияAllow
, чтобы предотвратить распахивание узла.TreeListControlBase.NodeExpanded
— запускается после расширения узла.TreeListControlBase.NodeCollapsing
— Срабатывает, когда узел вот-вот будет свернут. Вы можете использовать параметр событияAllow
, чтобы предотвратить сворачивание узла.TreeListControlBase.NodeCollapsed
— Срабатывает после того, как узел был свернут.
Встроенные флажки¶
Свойство TreeListControlBase.ShowNodeCheckBoxes
включает встроенные флажки узлов для контролов TreeList и TreeView. Флажки позволяют пользователю проверять (выбирать) отдельные узлы.
По умолчанию нажатые флажки имеют два состояния — нажатый и ненажатый. Если вы установите для свойства AllowIndeterminateCheckState
значение true
, нажатые флажки поддерживают три состояния — нажато, ненажатое и неопределенное.
Для контрола TreeList вы можете включить опцию TreeListControl.ShowCheckAllNodesCheckBox
для отображения флажка Check All
в заголовке столбца иерархии. Этот флажок выбирает и отменяет выбор всех узлов одновременно.
Получение и настройка состояния нажатия для узла¶
Используйте свойство TreeListNode.IsChecked
узла для считывания и указания состояния нажатия узла. Свойство TreeListNode.IsChecked
имеет логический тип с возможностью обнуления, поэтому вы можете присвоить свойству null
для переключения узла в неопределенное состояние.
Получение нажатых узлов¶
Используйте метод GetAllCheckedNodes
для извлечения узлов с нажатым состоянием.
Вы также можете создать итератор для извлечения узлов, соответствующих пользовательским критериям.
Синхронизация состояний нажатия с источником данных¶
Используйте свойство CheckBoxFieldName
, чтобы синхронизировать состояния нажатия узла с определенным полем источника данных. Это свойство определяет имя логического поля или поля источника логических данных с возможностью обнуления, в котором хранятся состояния нажатия для узлов.
Рекурсивная проверка¶
AllowRecursiveNodeChecking
позволяет выполнять рекурсивную проверку узлов. В этом режиме дочерние узлы изменяют свое состояние нажатия, когда изменяется состояние нажатия родительского узла, и наоборот.
Выбор нескольких узлов (выделение)¶
Контролы TreeList и TreeView поддерживают режим выбора нескольких узлов, который позволяет вам и вашему пользователю выбирать (выделять) несколько узлов одновременно.
Установите для свойства SelectionMode
значение Multiple
, чтобы включить режим выбора нескольких узлов.
Выбор узлов с помощью мыши и клавиатуры¶
Пользователи могут выбирать несколько узлов с помощью мыши и клавиатуры. Им нужно щелкать по узлам, удерживая нажатой клавишу CTRL и/или SHIFT.
Работа с выбором узлов в коде¶
Следующий API позволяет вам выбирать / отменять выбор узлов и определять, выбран ли узел:
SelectAll
SelectNode
SelectRange
UnselectNode
ClearSelection
IsNodeSelected
Чтобы восстановить выбранный узел, используйте следующие элементы:
GetSelectedNodes
— Возвращает коллекцию выбранных в данный момент объектовTreeListNode
.SelectedItems
— Определяет набор данных (бизнес-объектов), которые соответствуют выбранным узлам.
Обработайте событие SelectionChanged
, чтобы отреагировать на изменения в выборе узла.
Вызов любого метода, который изменяет выбранное состояние узла, вызывает обновление контрола TreeList/TreeView и вызывает событие SelectionChanged
.
Чтобы выполнить пакетные изменения в выборе узла и предотвратить ненужные обновления, вы можете обернуть код, который изменяет выбранные состояния узлов, парой методов BeginSelection
и EndSelection
. В этом случае контрол перерисовывает выделение, и событие SelectionChanged
срабатывает после вызова метода EndSelection
.
treeList1.SelectionMode = Eremex.AvaloniaUI.Controls.DataControl.RowSelectionMode.Multiple;
// Start a batch update of the node selection.
treeList1.BeginSelection();
treeList1.ClearSelection();
treeList1.SelectNode(node1);
treeList1.SelectNode(node2);
//...
// Finish the batch update.
treeList1.EndSelection();
Сфокусированный узел против выбранных узлов¶
Сфокусированный узел - это узел, который получает пользовательский ввод. Сфокусированный узел может быть не синхронизирован с выбранным (подсвеченным) узлом в режиме множественного выбора. Подробности о режиме приведены в следующих разделах.
Сфокусированный узел в режиме одиночного выбора¶
В режиме одиночного выбора сфокусированный узел автоматически получает выбранное состояние. Вы можете использовать свойство FocusedNode
и метод GetSelectedNodes
для извлечения сфокусированного узла.
Сфокусированный узел в режиме множественного выбора¶
Сфокусированное и выбранное состояния различаются в режиме выбора нескольких узлов. Выбран узел или нет, можно определить по выделению узла. Выделяются только выбранные узлы.
В режиме множественного выбора щелчок по узлу фокусирует и выбирает этот узел одновременно. Пользователь, однако, может изменить выбранное состояние сфокусированного узла, выполнив следующие действия:
- Нажмите CTRL+ПРОБЕЛ.
- Щелкните по выделенному узлу, удерживая нажатой клавишу CTRL.
Когда вы выбираете узел в коде, этот узел не получает сфокусированного состояния в режиме множественного выбора, и наоборот.
Поиск узлов¶
Метод TreeListControlBase.FindNode
позволяет вам находить узлы, соответствующие пользовательским критериям.
Следующий код позволяет выбрать несколько узлов и находит и выбирает два узла, которые содержат определенные значения в поле Name.
treeList1.SelectionMode = Eremex.AvaloniaUI.Controls.DataControl.RowSelectionMode.Multiple;
treeList1.ExpandAllNodes();
TreeListNode node1 = treeList1.FindNode(node =>
(node.Content as Employee).Name.Contains("Sam"));
TreeListNode node2 = treeList1.FindNode(node =>
(node.Content as Employee).Name.Contains("Dan"));
treeList1.ClearSelection();
treeList1.SelectNode(node1);
treeList1.SelectNode(node2);
Смотрите также: Фильтрация и поиск .
Итерация по узлам¶
Вы можете создать итератор (объект TreeListNodeIterator
) для рекурсивного перебора узлов и выполнения над ними операции.
Используйте один из следующих конструкторов для создания объекта TreeListNodeIterator
:
// Recursively iterates through child nodes of the specified node, and their children.
public TreeListNodeIterator(TreeListNode? node, bool onlyExpanded = false)
// Recursively iterates through the specified nodes, and their children.
public TreeListNodeIterator(TreeListNodeCollection? nodes, bool onlyExpanded = false)
Параметр onlyExpanded указывает, следует ли выполнять итерацию по развернутым узлам или по развернутым и свернутым узлам.
Высота узла¶
Все узлы изначально имеют одинаковую высоту, достаточную для отображения одной линии текста. Вы можете задать пользовательскую высоту узла, а также включить автоматическое вычисление высоты узла для отображения больших текстовых данных в ячейках целиком.
Настраиваемая высота узла¶
-
Свойство
DataControlBase.RowMinHeight
— возвращает или устанавливает минимальную высоту узла.Если функция автоматической настройки высоты узла отключена, все узлы будут иметь одинаковую высоту, указанную свойством
DataControlBase.RowMinHeight
.
Автоматическая настройка высоты узла¶
Для столбцов, содержащих длинный текст, вы можете включить перенос текста, чтобы динамически регулировать высоту узлов и отображать полное содержимое ячейки.
Чтобы включить перенос текста для ячеек столбца, назначьте объекту TextEditorProperties
(или его потомку; например, ButtonEditorProperties
) свойство GridColumn.EditorProperties
и установите для опции TextEditorProperties.TextWrapping
значение Wrap
.
Совет
A TextEditorProperties
object is used to configure an in-place TextEditor
editor for a column. At runtime, the editor is instantiated using these settings. See Data Editing for more information.
Следующий код включает перенос текста для столбца TreeList.
<mxtl:TreeListColumn FieldName="LongDescription" Width="2*">
<mxtl:TreeListColumn.EditorProperties>
<mxe:TextEditorProperties TextWrapping="Wrap"/>
</mxtl:TreeListColumn.EditorProperties>
</mxtl:TreeListColumn>
Автоматическая регулировка Высоты Узла При Горизонтальной Прокрутке¶
Горизонтальная виртуализация , поддерживаемая TreeList, повышает производительность контрола за счет сокращения времени загрузки.
Если эта функция включена (по умолчанию), высота узлов вычисляется автоматически в соответствии с содержимым видимых в данный момент ячеек. Ячейки за пределами области просмотра не влияют на вычисление высоты узлов. При прокрутке до ячеек с разной высотой содержимого высота узлов регулируется динамически. Чтобы предотвратить динамическое изменение высоты узла при горизонтальной прокрутке, используйте свойство DataGridControl.AllowHorizontalVirtualization
для отключения горизонтальной виртуализации.
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.