Спасибо за ваши ответы! Я нашел решение, которое соответствует моим потребностям.
Я следил за этим и сортировал мой список в правильном порядке. Затем я написал конвертер LevelToMargin, который преобразует уровень элемента в поле. Например:
Уровень 0 -> Margin: 0
Уровень 1 -> Маржа: 20
Уровень 2 -> Маржа: 40
...
LevelToMargin-конвертер:
public class LevelToMarginConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var v = (value as int?)*20;
return new Thickness(System.Convert.ToDouble(v),0, 0, 0);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
var t = value is Thickness ? (Thickness) value : new Thickness();
return t.Left/20;
}
}
Затем я связать мой уровень к краю ListItem
<DataTemplate x:Key="GradingCriteriaListDataTemplate"
x:Name="GradingCriteriaListDataTemplate">
<Grid Width="400">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Padding="5,5,5,5"
Background="#eaeaea"
BorderBrush="Black"
Margin="{Binding Level, Converter={StaticResource LevelToMarginConverter}}"
Grid.Column="0">
<Border Margin="15,5,5,5"
Height="50"
VerticalAlignment="Stretch"
BorderBrush="Yellow"
BorderThickness="10,0,0,0">
<StackPanel Margin="20,0,0,0">
<TextBlock FontWeight="Bold"
Text="{Binding Name}" />
</StackPanel>
</Border>
</Border>
</Grid>
</DataTemplate>
Это работает для меня :)
Какой код вы уже пробоировали? См. [Какие темы можно задать здесь?] (Http://stackoverflow.com/help/on-topic), [Как задать хороший вопрос?] (Http://stackoverflow.com/help/how -to-ask) и [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). – Makyen
Привет! Я не пробовал много, потому что не знаю, с чего начать. Я попробовал XAML Toolkit TreeView, но я не мог отключить разворот/сбой. Теперь мой единственный подход - собрать всю иерархию и подсчитать глубину текущего элемента и привязать маржу к этой глубине - но это не очень хорошее решение, и производительность будет плохой. –