В моем элементе управления есть TreeView с набором элементов, которые могут находиться на одном из трех уровней. Объекты внутри TreeView имеют свойство, называемое Level, которое определяет это. Под TreeView есть несколько текстовых полей. Текстовые поля следует заполнять в зависимости от уровня SelectedItem в TreeView. Если выбран элемент на верхнем уровне, следует заполнить только первое текстовое поле. Если выбран элемент на втором уровне, следует заполнить первый, второй TextBox и так далее. Это структура элементов в TreeView:
-Item1 <- Level = 0
-- SubItem1 <- Level = 1
-- SubSubItem1 <- Level = 2
-- SubSubItem2
-Item2 <- Level = 0
-- SubItem1 <- Level = 1
-- SubSubItem1 <- Level = 2
-- SubItem2
-- SubSubItem1
Я попытался выполнить эту задачу с помощью триггера как в HierarchicalDataTemplate TreeView, так и в стиле TextBox. Проблема с HierarchicalDataTemplate TreeView заключается в том, что у меня нет доступа к TextBox, поскольку он (TextBox) не входит в область DataTemplate и не компилируется. Другая попытка просто не дает результата. Это XAML моего контроля:
<TreeView Grid.Row="1" Margin="5" ItemsSource="{Binding Privileges}" Name="Privileges">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}">
<TextBlock Text="{Binding}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<TextBox Grid.Row="0" Margin="3">
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Privileges.SelectedItem.Level}" Value="0">
<Setter Property="TextBox.Text" Value="Test"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>