使用 UI 自动化框架为 WPF 网格中的数据项设置自动化 ID

Setting automationIDs for dataitems in a WPF Grid for automation with UI Automation Framework

我有一个使用 .NET Framework 3.5 用 C# 编写的应用程序,我想使用 Microsoft UI Automation Framework 自动化 UI。我不能在这里展示所有内容,因为它是我公司的软件。

在此应用程序中,我生成了一个显示我的数据项的网格。

我试图通过 XAML 为网格中的每个数据项设置 automationID,但问题是,我在那里看不到数据项。它们是在我的应用程序运行时动态生成的。 XAML 中只定义了包含数据项的网格。我将 post 下面是我的 XAML 的一个片段。

我也试过通过程序的代码设置automationIDs,但我只设法得到每个数据项的AutomationElement。我被困在那里了。我不知道如何为那里的每个 AutomationElement 设置 automationIds。

总而言之,我正在寻找:

我的检查工具的屏幕截图: Inspect Tool

我的 XAML 代码片段:

    <ListView IsEnabled="{Binding TestSelectorEnabled}" x:Name="ListView1" ItemsSource="{Binding TestsViewModel.TestsDataTable}" SelectedValue="{Binding TestsViewModel.SelectedTest}" SelectedValuePath="TestName" Height="180" View="{Binding TestsViewModel.GridView}"  TabIndex="0" MinWidth="1" Focusable="False"/>
            <Grid  Visibility="Collapsed" IsSharedSizeScope="False">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="200"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="40"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="25"></RowDefinition>
                    <RowDefinition Height="20"></RowDefinition>
                </Grid.RowDefinitions>
            </Grid>

尝试明确指定 ItemTemplate,它会让您设置 ID。 它也应该是一个自动化 API 来遍历 ListView 子项。

感谢@Viktor Syromiatnikov 这让我走上了正确的轨道。我现在设法为每个 ListViewItem 设置一个静态 automationId。

有谁知道如何为每个 ListViewItem 设置 automationID 动态,使每个新 ListViewItem 看起来像 dataitem1、dataitem2、dataitem3?

我的 XAML 现在看起来像这样:

<ListView IsEnabled="{Binding TestSelectorEnabled}" x:Name="ListView1" ItemsSource="{Binding TestsViewModel.TestsDataTable}" SelectedValue="{Binding TestsViewModel.SelectedTest}" SelectedValuePath="TestName" Height="180" View="{Binding TestsViewModel.GridView}"  TabIndex="0" MinWidth="1" Focusable="False">
                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="AutomationProperties.AutomationId" Value="dataitem"/>
                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>