我有一个多级树视图,最多 4 个级别如下:
<HierarchicalDataTemplate ItemsSource="{Binding TestModuleStatementList}" x:Key="level4" ItemTemplate="{StaticResource level5}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="600"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="1,1,0,1" Name="lblStatementName" Style="{StaticResource TreeLabelStyle}" MouseLeftButtonUp="ViewTestDataTree_MouseLeftButtonUp" MouseRightButtonUp="ViewTestDataTree_MouseRightButtonUp" Padding="2,2,2,2" Text="{Binding DisplayText}" />
<Border Grid.Column="1" Margin="0,0,-2,0" Style="{StaticResource BorderStylePassCountTestData}">
<TextBlock Style="{StaticResource TextBlockPassCountStyleTestData}"/>
</Border>
<Border Grid.Column="2" Margin="0,0,-2,0" Style="{StaticResource BorderStyleFailCountTestData}">
<TextBlock Style="{StaticResource TextBlockFailCountStyleTestData}"/>
</Border>
<Border Grid.Column="3" Margin="0,0,-2,0" Style="{StaticResource BorderStyleModulePassCountTestData}">
<TextBlock Style="{StaticResource TextBlockModulePassCountStyleTestData}"/>
</Border>
<Border Grid.Column="4" Margin="0,0,-2,0" Style="{StaticResource BorderStyleModuleFailCountTestData}">
<TextBlock Style="{StaticResource TextBlockModuleFailCountStyleTestData}"/>
</Border>
</Grid>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding TestModules}" x:Key="level3" ItemTemplate="{StaticResource level4}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="620"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="1,1,0,1" Name="lblCategoryName" Style="{StaticResource TreeLabelStyle}" MouseLeftButtonUp="ViewTestDataTree_MouseLeftButtonUp" MouseRightButtonUp="ViewTestDataTree_MouseRightButtonUp" Padding="2,2,2,2" Text="{Binding DisplayText}" />
<Border Grid.Column="1" Margin="0,0,-2,0" Style="{StaticResource BorderStylePassCountTestData}">
<TextBlock Style="{StaticResource TextBlockPassCountStyleTestData}"/>
</Border>
<Border Grid.Column="2" Margin="0,0,-2,0" Style="{StaticResource BorderStyleFailCountTestData}">
<TextBlock Style="{StaticResource TextBlockFailCountStyleTestData}"/>
</Border>
<Border Grid.Column="3" Margin="0,0,-2,0" Style="{StaticResource BorderStyleModulePassCountTestData}">
<TextBlock Style="{StaticResource TextBlockModulePassCountStyleTestData}"/>
</Border>
<Border Grid.Column="4" Margin="0,0,-2,0" Style="{StaticResource BorderStyleModuleFailCountTestData}">
<TextBlock Style="{StaticResource TextBlockModuleFailCountStyleTestData}"/>
</Border>
</Grid>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding TestModuleCategories}" x:Key="level2" ItemTemplate="{StaticResource level3}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="640"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="1,1,1,1" Name="lblDeviceName" MouseLeftButtonUp="ViewTestDataTree_MouseLeftButtonUp" MouseRightButtonUp="ViewTestDataTree_MouseRightButtonUp" ToolTip="{Binding DisplayText}" Style="{StaticResource TreeLabelStyle}" Padding="2,2,2,2" Text="{Binding DisplayText}" />
<TextBox Grid.Column="0" Margin="1,1,1,1" Name="DeviceNameTextBox" LostFocus="TextBox_LostFocus"
Text="{Binding RenameDeviceText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
PreviewKeyDown="TextBox_PreviewKeyDown"
Padding="2,2,2,2" MaxLength="100"
Visibility="{Binding Path=Edit, Converter={StaticResource BoolToVisibilityCollapsedConverter}, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}">
<TextBox.CommandBindings>
<CommandBinding Command="Paste" CanExecute="CommandBinding_CanExecute"/>
</TextBox.CommandBindings>
</TextBox>
<Border Grid.Column="1" Margin="0,0,-1,0" Style="{StaticResource BorderStylePassCountTestData}">
<TextBlock Style="{StaticResource TextBlockPassCountStyleTestData}"/>
</Border>
<Border Grid.Column="2" Margin="0,0,-1,0" Style="{StaticResource BorderStyleFailCountTestData}">
<TextBlock Style="{StaticResource TextBlockFailCountStyleTestData}"/>
</Border>
<Border Grid.Column="3" Margin="0,0,-1,0" Style="{StaticResource BorderStyleModulePassCountTestData}">
<TextBlock Style="{StaticResource TextBlockModulePassCountStyleTestData}"/>
</Border>
<Border Grid.Column="4" Margin="0,0,-1,0" Style="{StaticResource BorderStyleModuleFailCountTestData}">
<TextBlock Style="{StaticResource TextBlockModuleFailCountStyleTestData}"/>
</Border>
</Grid>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding TestRuns}" x:Key="level1" ItemTemplate="{StaticResource level2}" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="660"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
<ColumnDefinition Width="130"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="1,1,2,1" Name="lblProjectName" MouseLeftButtonUp="ViewTestDataTree_MouseLeftButtonUp" MouseRightButtonUp="ViewTestDataTree_MouseRightButtonUp" Style="{StaticResource TreeLabelStyle}" Padding="2,2,2,2" Text="{Binding DisplayText}"/>
<Border Grid.Column="1" Style="{StaticResource BorderStylePassCountTestData}">
<TextBlock Style="{StaticResource TextBlockPassCountStyleTestData}"/>
</Border>
<Border Grid.Column="2" Style="{StaticResource BorderStyleFailCountTestData}">
<TextBlock Style="{StaticResource TextBlockFailCountStyleTestData}"/>
</Border>
<Border Grid.Column="3" Style="{StaticResource BorderStyleModulePassCountTestData}">
<TextBlock Style="{StaticResource TextBlockModulePassCountStyleTestData}"/>
</Border>
<Border Grid.Column="4" Style="{StaticResource BorderStyleModuleFailCountTestData}">
<TextBlock Style="{StaticResource TextBlockModuleFailCountStyleTestData}"/>
</Border>
</Grid>
</HierarchicalDataTemplate>
<TreeView BorderThickness="0" Name="ViewTestDataTree" VirtualizingStackPanel.IsVirtualizing = "True"
VirtualizingStackPanel.VirtualizationMode = "Recycling" ItemsSource="{Binding Projects}" Grid.Row="1"
ItemTemplate="{StaticResource level1}" Background="{StaticResource ATAM_WindowBackground}" FocusVisualStyle="{x:Null}">
<TreeView.ItemContainerStyle>
<!-- Make the focus highlight rectangle, around the current tree item, barely visible -->
<Style TargetType="{x:Type TreeViewItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FF202020" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#FF202020" />
</Style.Resources>
<Setter Property="IsExpanded" Value="{Binding IsExpanded}"/>
<EventSetter Event="TreeViewItem.Expanded" Handler="TreeViewItem_Expanded"/>
<EventSetter Event="TreeViewItem.Collapsed" Handler="TreeViewItem_Collapsed"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
在这里,我在 TreeView.ItemContainerStyle 中有一个 setter 属性="IsExpanded" Value="{Binding IsExpanded}"> 但是当我从代码中将级别 4 IsExpanded 属性的 TestStamentList 设置为 True 时,该项目不会扩展。我想在按钮单击(查找下一个按钮(事件中扩展具有某些特定条件的孩子。
注:-I在所有列表级别(4 个级别(上都有 IsExpanded 属性,我正在设置 IsExpanded=true 的最后一个级别列表(TestModuleStatementList(。
以下是我的按钮点击事件:
private void FindNextFailButton_Click(object sender, RoutedEventArgs e)
{
foreach (var Project in Projects)
{
foreach (var Devices in Project.TestRuns)
{
foreach (var Category in Devices.TestModuleCategories)
{
foreach (var TestModule in Category.TestModules)
{
foreach (var statement in TestModule.TestModuleStatementList)
{
if(statement.ModuleFailed==1)
{
//TreeViewItem item = ViewTestDataTree.ItemContainerGenerator.ContainerFromItem(statement) as TreeViewItem;
//item.IsExpanded = true;
Project.IsExpanded = true;
Devices.IsExpanded = true;
Category.IsExpanded = true;
TestModule.IsExpanded = true;
statement.IsExpanded = true;
statement.IsSelected = true;
return;
//ViewTestDataTree.SelectedItem = statement;
}
}
}
}
}
}
}
}
请提供一些帮助
提前谢谢。
作为答案发布,因为我无法在评论中标记已解决。 https://learn.microsoft.com/en-us/dotnet/framework/wpf/controls/how-to-find-a-treeviewitem-in-a-treeview