Стили¶
Контролы TreeList и TreeView поддерживают систему стилизации Avalonia, которая позволяет настраивать свойства визуальных элементов контролов. 
Используйте свойство TreeListControl.Styles для применения стилей к следующим визуальным элементам:
- Заголовок столбца
- Ряд
- Ячейка строки
- Отступ строки
Типичный стиль содержит селектор стилей и набор средств настройки свойств. Селектор определяет целевой объект контрола, который инкапсулирует визуальный элемент. Установщики свойств определяют свойства целевого контрола и их значения.
Следующий код создает простой стиль, который устанавливает фон для всех строк TreeList одинакового цвета.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
xmlns:mxtlvis="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList.Visuals;assembly=Eremex.Avalonia.Controls"
<mxtl:TreeListControl.Styles>
    <Style Selector="mxtlvis|TreeListRowControl">
        <Setter Property="Background" Value="Ivory" />
    </Style>
</mxtl:TreeListControl.Styles>
Применение стилей к определенным состояниям контрола¶
Селекторы стилей поддерживают псевдоклассы в Avalonia. Псевдокласс - это ключевое слово, добавляемое к селектору. Он определяет состояние целевого контрола, к которому применяется стиль.
Контролы TreeList и TreeView предоставляют пользовательские псевдоклассы для обращения к определенным состояниям визуальных элементов контролов. В разделах ниже перечислены пользовательские псевдоклассы, поддерживаемые для визуальных элементов контролов.
Приведенный ниже код создает селектор стилей, который нацелен на строки TreeList. Псевдокласс :focusedAndSelectedState используется только для применения стиля к строкам, которые находятся в сфокусированном состоянии.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
xmlns:mxtlvis="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList.Visuals;assembly=Eremex.Avalonia.Controls"
<Style Selector="mxtlvis|TreeListRowControl:focusedAndSelectedState">
    ...
</Style>
Контролы визуальных элементов¶
Синтаксис селектора стилей должен указывать целевой контрол (объект контрола, который инкапсулирует визуальный элемент), к которому применяется стиль. На следующей картинке показаны визуальные элементы TreeList/TreeView и соответствующие целевые контролы.

Стилизация строки (узла)¶
Строка - это визуальный элемент, который отображает ячейки.
Используйте следующую информацию, чтобы настроить стиль строки:
Целевой класс контрола¶
TreeListRowControl (в контроле TreeList), TreeViewRowControl (в контроле TreeView)
DataContext¶
Объект данных (бизнес) строки
Пользовательские псевдоклассы¶
- ":selectedState" — строка выделена, но не сфокусирована. Это состояние действует в режиме выбора нескольких строк.
- ":focusedState" — строка сфокусирована, но не выбрана. Это состояние действует в режиме выбора нескольких строк.
- ":focusedAndSelectedState" — строка сфокусирована и выбрана. Это состояние действует в режимах выбора нескольких и одной строки.
- ":editingState" — Узел имеет активный редактор встроенных файлов.
Пример - Как настроить стиль сфокусированного узла¶
Следующий код создает стиль, который настраивает фон сфокусированного узла TreeList.
Строки Tree List отображаются в соответствии с предопределенным шаблоном. Этот шаблон содержит объект Border (с именем RowBorder), который украшает ячейки рамкой и фоном. 
В приведенном ниже примере изменяется свойство Background объекта RowBorder для сфокусированного узла.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
xmlns:mxtlvis="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList.Visuals;assembly=Eremex.Avalonia.Controls"
<mxtl:TreeListControl.Styles>
    <Style Selector="mxtlvis|TreeListRowControl:focusedAndSelectedState /template/ Border#RowBorder">
        <Setter Property="Background" Value="SkyBlue" />
    </Style>
</mxtl:TreeListControl.Styles>
Пример - Как настроить свойства внешнего вида узла в соответствии со значениями ячеек¶
Следующий код настраивает свойства цвета фона и шрифта строк (узлов) в зависимости от значений строк.

Фон строки зависит от свойства Status этой строки. Объект RowStatusToBrushConverter определяет кисть, которая будет использоваться для строк, для свойства Status которых установлено значение InProgress.
Если у строк есть дочерние элементы, логическое свойство HasTasks для этих строк возвращает true. Эти строки рисованы жирным шрифтом.
Когда ячейки строк не находятся в режиме редактирования, они отображаются с помощью контролов TextBlock. Созданный стиль изменяет attached-свойство TextBlock.FontWeight для настройки веса шрифта текста во всех ячейках строки. Объект Eremex.AvaloniaUI.Controls.BoolToObjectConverter определяет фактический вес шрифта. Конвертер возвращает значение, которое зависит от свойства HasTasks строки.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
xmlns:mxtlvis="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList.Visuals;assembly=Eremex.Avalonia.Controls"
xmlns:mx="https://schemas.eremexcontrols.net/avalonia"
xmlns:views="using:DemoCenter.Views"
<UserControl.Resources>
    <views:RowStatusToBrushConverter x:Key="myRowStatusToBrushConverter"/>
</UserControl.Resources>
<mxtl:TreeListControl.Styles>
    <Style Selector="mxtlvis|TreeListRowControl">
        <Setter Property="Background" Value="{Binding Status, 
         Converter={StaticResource myRowStatusToBrushConverter}}"/>
        <Setter Property="TextBlock.FontWeight">
            <Setter.Value>
                <Binding Path="HasTasks">
                    <Binding.Converter>
                        <mx:BoolToObjectConverter>
                            <mx:BoolToObjectConverter.TrueValue>
                                <FontWeight>Bold</FontWeight>
                            </mx:BoolToObjectConverter.TrueValue>
                            <mx:BoolToObjectConverter.FalseValue>
                                <FontWeight>Normal</FontWeight>
                            </mx:BoolToObjectConverter.FalseValue>
                        </mx:BoolToObjectConverter>
                    </Binding.Converter>
                </Binding>
            </Setter.Value>
        </Setter>
    </Style>
</mxtl:TreeListControl.Styles>
public class RowStatusToBrushConverter : IValueConverter
{
    static Brush lightGreenBrush = new SolidColorBrush(0xFFA8F0ED);
    public object Convert(object value, Type targetType, object parameter, 
     CultureInfo culture)
    {
        if (value == null) return null;
        DemoData.TaskStatus rowStatus = (DemoData.TaskStatus)value;
        if (rowStatus == DemoData.TaskStatus.InProgress)
            return lightGreenBrush;
        return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, 
     CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Стилизация ячейки строки¶
Ячейки строк (узлов) отображают значения столбцов. В контроле TreeView в каждой строке отображается только одно значение.
Чтобы настроить стиль ячейки строки, используйте следующую информацию:
Целевой класс контрола¶
TreeListCellControl
DataContext¶
Объект Eremex.AvaloniaUI.Controls.DataControl.Visuals.CellData. Основными свойствами, предоставляемыми объектом CellData, являются:
- Column— столбец (объект- ColumnBase), который отображает ячейку. Когда вы применяете стиль к объекту TreeView, свойство- CellData.Columnсодержит объект- ColumnBase, который инкапсулирует столбец значений TreeView.
- DataControl— Контрол TreeList/TreeView (объект- DataControlBase).
- Row— нижележащий объект данных (бизнес) строки.
- ValidationInfo— объект, содержащий информацию о валидации ячейки.
- Value— Значение ячейки.
Пользовательские псевдоклассы¶
Пользовательские псевдоклассы соответствуют тем, которые применяются к объектам row. Они показаны ниже:
- ":selectedState" — строка выделена, но не сфокусирована. Это состояние действует в режиме выбора нескольких строк.
- ":focusedState" — строка сфокусирована, но не выбрана. Это состояние действует в режиме выбора нескольких строк.
- ":focusedAndSelectedState" — строка сфокусирована и выбрана. Это состояние действует в режимах выбора нескольких и одной строки.
- ":editingState" — встроенный редактор ячейки активен.
Пример - Как настроить стиль ячейки в соответствии со значением ячейки¶
Объект Style в приведенном ниже коде задает фон ячеек, содержащих значение true в свойстве строки OnVacation.
Стиль задает свойству Background контролов ячеек (объектов TreeListCellControl) значение brush, возвращаемое пользовательским конвертером OnVacationCellValueToBrushConverter. Конвертер возвращает кисть в соответствии с столбцом ячейки и значением.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
xmlns:mxtlvis="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList.Visuals;assembly=Eremex.Avalonia.Controls"
xmlns:mx="https://schemas.eremexcontrols.net/avalonia"
xmlns:local="clr-namespace:AvaloniaApp1"
<Grid.Resources>
    <local:OnVacationCellValueToBrushConverter x:Key="myOnVacationCellValueToBrushConverter" />
</Grid.Resources>
<mxtl:TreeListControl.Styles>
    <Style Selector="mxtlvis|TreeListCellControl">
        <Setter Property="Background">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource myOnVacationCellValueToBrushConverter}">
                    <Binding Path="Row.OnVacation" />
                    <Binding Path="Column" />
                </MultiBinding>
            </Setter.Value>
        </Setter>
    </Style>
</mxtl:TreeListControl.Styles>
public class OnVacationCellValueToBrushConverter : IMultiValueConverter
{
    public object? Convert(IList<object?> values, Type targetType, 
     object? parameter, CultureInfo culture)
    {
        bool onVacation = (bool)values[0];
        TreeListColumn column = (TreeListColumn)values[1];
        if (column.FieldName == "OnVacation" && onVacation)
            return new SolidColorBrush(Colors.Aqua);
        return null;
    }
}
Стилизация области отступа строки¶
В области отступа отображаются кнопки развертывания и картинки узлов. Область отступа - это часть ячейки, которая отображает иерархию узлов.
Чтобы настроить стиль области отступа строки, используйте следующую информацию:
Целевой класс контрола¶
TreeListIndentControl
DataContext¶
Объект Eremex.AvaloniaUI.Controls.DataControl.Visuals.CellData. Дополнительную информацию смотрите в разделе Оформление ячейки строки .
Пользовательские псевдоклассы¶
Пользовательские псевдоклассы соответствуют тем, которые применяются к объектам row. Они показаны ниже:
- ":selectedState" — строка выделена, но не сфокусирована. Это состояние действует в режиме выбора нескольких строк.
- ":focusedState" — строка сфокусирована, но не выбрана. Это состояние действует в режиме выбора нескольких строк.
- ":focusedAndSelectedState" — строка сфокусирована и выбрана. Это состояние действует в режимах выбора нескольких и одной строки.
- ":editingState" — Узел имеет активный редактор встроенных файлов.
Пример - Как настроить область отступа конкретной строки¶
Следующий код создает стиль, который настраивает фон отступов в строках, для которых для значений строк HasChildren установлено значение true.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
xmlns:mxtlvis="clr-namespace:Eremex.AvaloniaUI.Controls.TreeList.Visuals;assembly=Eremex.Avalonia.Controls"
xmlns:mx="https://schemas.eremexcontrols.net/avalonia"
<mxtl:TreeListControl.Styles>
    <Style Selector="mxtlvis|TreeListIndentControl">
        <Setter Property="Background">
            <Setter.Value>
                <Binding Path="Row.HasChildren">
                    <Binding.Converter>
                        <mx:BoolToObjectConverter>
                            <mx:BoolToObjectConverter.TrueValue>
                                <SolidColorBrush Color="Coral"/>
                            </mx:BoolToObjectConverter.TrueValue>
                        </mx:BoolToObjectConverter>
                    </Binding.Converter>
                </Binding>
            </Setter.Value>
        </Setter>
    </Style>
</mxtl:TreeListControl.Styles>
Стиль заголовка столбца (контрол TreeList)¶
В заголовке столбца отображается заголовок столбца и индикаторы сортировки.
Используйте следующую информацию, чтобы настроить стиль заголовка столбца:
Целевой класс контрола¶
ColumnHeaderControl
DataContext¶
TreeListColumn
Пользовательские псевдоклассы¶
- ":сортировка по возрастанию" — столбец сортируется в порядке возрастания.
- ":sortdescending" — столбец сортируется в порядке убывания.
- ":перетаскивание" — перетаскивается столбец.
Пример - Как настроить свойства внешнего вида заголовка определенного столбца¶
Следующий код показывает, как рисовать заголовок столбца TreeList OnVacation жирным шрифтом.
xmlns:mxtl="https://schemas.eremexcontrols.net/avalonia/treelist"
xmlns:mxvis="Eremex.AvaloniaUI.Controls.DataControl.Visuals;assembly=Eremex.Avalonia.Controls"
xmlns:local="clr-namespace:AvaloniaApp1"
<Grid.Resources>
    <local:ColumnToFontWeightConverter x:Key="myColumnToFontWeightConverter" />
</Grid.Resources>
<mxtl:TreeListControl.Styles>
    <Style Selector="mxvis|ColumnHeaderControl">
        <Setter Property="FontWeight" 
         Value="{Binding Converter={StaticResource myColumnToFontWeightConverter}}">
        </Setter>
    </Style>
</mxtl:TreeListControl.Styles>
public class ColumnToFontWeightConverter : IValueConverter
{
    public object? Convert(object? value, Type targetType, object? parameter, 
     CultureInfo culture)
    {
        TreeListColumn col = value as TreeListColumn;
        if(col!=null && col.FieldName=="OnVacation")
        {
            return FontWeight.Bold;
        }
        return null;
    }
    public object? ConvertBack(object? value, Type targetType, object? parameter, 
     CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.