使用 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。
总而言之,我正在寻找:
- 通过 XAML
为 WPF 网格中的数据项设置 automationID
- 通过代码设置数据项 AutomationElement 的 automationID
我的检查工具的屏幕截图:
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>
我有一个使用 .NET Framework 3.5 用 C# 编写的应用程序,我想使用 Microsoft UI Automation Framework 自动化 UI。我不能在这里展示所有内容,因为它是我公司的软件。
在此应用程序中,我生成了一个显示我的数据项的网格。
我试图通过 XAML 为网格中的每个数据项设置 automationID,但问题是,我在那里看不到数据项。它们是在我的应用程序运行时动态生成的。 XAML 中只定义了包含数据项的网格。我将 post 下面是我的 XAML 的一个片段。
我也试过通过程序的代码设置automationIDs,但我只设法得到每个数据项的AutomationElement。我被困在那里了。我不知道如何为那里的每个 AutomationElement 设置 automationIds。
总而言之,我正在寻找:
- 通过 XAML 为 WPF 网格中的数据项设置 automationID
- 通过代码设置数据项 AutomationElement 的 automationID
我的检查工具的屏幕截图: 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>