C# 是否可以使用Microsoft Automation UI在WPF/WinForm应用程序上单击标签控件

C# 是否可以使用Microsoft Automation UI在WPF/WinForm应用程序上单击标签控件,c#,wpf,microsoft-ui-automation,C#,Wpf,Microsoft Ui Automation,在我们的应用程序中,我们有一个可点击的标签,它将弹出另一个窗口。我一直在阅读Microsoft Automation UI文档,但找不到单击标签控件的方法 我知道我不能使用Invoke模式,因为它只处理按钮控件 下面是我们从XAML获得的代码 <Label Name="LblCompleteOrdersCount" Content="{Binding CompleteOrders, Mode=OneWay}" Margin="434,45,0,0" Height="62" Width="

在我们的应用程序中,我们有一个可点击的标签,它将弹出另一个窗口。我一直在阅读Microsoft Automation UI文档,但找不到单击标签控件的方法

我知道我不能使用Invoke模式,因为它只处理按钮控件

下面是我们从XAML获得的代码

 <Label Name="LblCompleteOrdersCount" Content="{Binding CompleteOrders, Mode=OneWay}" Margin="434,45,0,0" Height="62" Width="170" Padding="0" HorizontalAlignment="Left" VerticalAlignment="Top" VerticalContentAlignment="Top" FontSize="56" FontWeight="Bold">
    <Label.InputBindings>
        <MouseBinding Command="{Binding Path=CompleteOrdersCommand}" MouseAction="LeftClick" />
    </Label.InputBindings>
 </Label>


我的提示是使用按钮。它源自ICommandSource接口,所以您可以轻松地使用命令将按钮与处理程序关联。扪心自问:标签提供了哪些按钮没有的功能?最好看看?覆盖默认按钮的模板,您将获得等效的外观。只要您不利用Label的任何附加功能,我就看不出有什么必要乱来。

从我的观点来看,您有3个选项来解决这个问题:

  • UI自动化方法是覆盖组件的AutomationPeer,并在您的案例中返回按钮AutomationPeer。这里最大的优势是Being能够模拟所需的每个定制行为。供进一步阅读
  • 使用标签的可点击点,并将其与User32.dll组合起来(在提供的坐标上点击实际鼠标)另请参见microsoft docu了解更多详细信息-此解决方案不需要对应用程序进行任何更改,但面临以下缺点:如果您不自己构建适当的子例程,您将无法同时自动化多个应用程序,并且您必须注意将应用程序保持在前台(您可以使用from User32.dll)
  • 正如Maximus所建议的那样,使用一个按钮,使其看起来像一个标签。我同意他的观点,在我们的情况下,这应该是一个有效的解决办法

  • 是什么让你选择标签而不是按钮?任何有利于标签的特殊功能权重?@Maximus标签用于显示我们的完整订单数量。我们的业务需要一种方式,使他们能够轻松查看完整订单的数量(以及每个订单的摘要),以便将这些订单导出到excel表格。而Button无法做到这一点?@Maximus我们可以在其中放置一个按钮,但我们需要标签来显示已完成订单的数量。使用then按钮,替代默认模板并使其看起来像标签。如果Label只提供按钮功能,但缺少UI测试支持,我认为没有必要胡闹。这不是运行/部署应用程序的答案,因为此时更改设计超出了范围。选项(1)应该只在WPF中工作?你能给出或指出选项(2)的一个例子吗?嗨,关于(1)我只在WPF中使用了这个,不确定winforms->add new SO问题怎么办?关于(2)我很抱歉,这些年来我引用了错误的.dll名称,编辑了我的帖子,并为您添加了有关相关函数的microsoft docu链接。。