From 33c58a965fea365eec6825acff6528527610bff2 Mon Sep 17 00:00:00 2001 From: Zhang Dian <54255897+zdpcdt@users.noreply.github.com> Date: Thu, 19 Jun 2025 01:33:26 +0800 Subject: [PATCH] feat: add TreeViewItemIndentConverter for dynamic margin calculation (#18718) --- .../Converters/TreeViewItemIndentConverter.cs | 21 +++++++++++++++++++ .../Controls/TreeViewItem.xaml | 12 ++++++----- .../Controls/TreeViewItem.xaml | 13 ++++++------ 3 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 src/Avalonia.Controls/Converters/TreeViewItemIndentConverter.cs diff --git a/src/Avalonia.Controls/Converters/TreeViewItemIndentConverter.cs b/src/Avalonia.Controls/Converters/TreeViewItemIndentConverter.cs new file mode 100644 index 0000000000..fe3695a5da --- /dev/null +++ b/src/Avalonia.Controls/Converters/TreeViewItemIndentConverter.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using Avalonia.Data.Converters; + +namespace Avalonia.Controls.Converters; + +public class TreeViewItemIndentConverter : IMultiValueConverter +{ + public static readonly TreeViewItemIndentConverter Instance = new(); + + public object? Convert(IList values, Type targetType, object? parameter, CultureInfo culture) + { + if (values.Count > 1 && values[0] is int level && values[1] is double indent) + { + return new Thickness(indent * level, 0, 0, 0); + } + + return new Thickness(0); + } +} diff --git a/src/Avalonia.Themes.Fluent/Controls/TreeViewItem.xaml b/src/Avalonia.Themes.Fluent/Controls/TreeViewItem.xaml index c92774bc10..a1b22528c9 100644 --- a/src/Avalonia.Themes.Fluent/Controls/TreeViewItem.xaml +++ b/src/Avalonia.Themes.Fluent/Controls/TreeViewItem.xaml @@ -25,9 +25,6 @@ 12, 0, 12, 0 M 1,0 10,10 l -9,10 -1,-1 L 8,10 -0,1 Z M0,1 L10,10 20,1 19,0 10,8 1,0 Z - @@ -76,8 +73,13 @@ MinHeight="{TemplateBinding MinHeight}" TemplatedControl.IsTemplateFocusTarget="True"> + ColumnDefinitions="Auto, *"> + + + + + + - + 16 @@ -45,10 +43,13 @@ Focusable="True" TemplatedControl.IsTemplateFocusTarget="True"> + + + + + +