在我的控件上是一个带有一组项目的 TreeView,这些项目可以位于三个级别之一。TreeView 中的对象有一个名为 Level 的属性来确定这一点。在 TreeView 下有一些文本框。应根据 TreeView 中 SelectedItem 的级别填充文本框。如果选择了顶层的项目,则只应填充第一个 TextBox。如果选择了第二级上的项目,则应填充第一个和第二个 TextBox,依此类推。这是 TreeView 中项目的结构:
-Item1 <- Level = 0
-- SubItem1 <- Level = 1
-- SubSubItem1 <- Level = 2
-- SubSubItem2
-Item2 <- Level = 0
-- SubItem1 <- Level = 1
-- SubSubItem1 <- Level = 2
-- SubItem2
-- SubSubItem1
我尝试在 TreeView 的 HierarchicalDataTemplate 和 TextBox 的样式中使用触发器来完成此任务。TreeView 的 HierarchicalDataTemplate 的问题是,我无法访问 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>