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

Is it possible to Click a label control on WPF/WinForm App using Microsoft Automation UI

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

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

下面是我们

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>

我的提示是使用 Button。它派生自 ICommandSource 接口,因此您可以毫不费力地使用 Command 将 Button 与处理程序相关联。问问自己:Label 提供了哪些 Button 不提供的功能?更好看?覆盖默认按钮的模板,您将获得相同的外观。只要您不利用 Label 的任何附加功能,我认为没有必要乱用它。

从我的角度来看,你有 3 个选项可以解决这个问题:

  1. UI 自动化方法 覆盖组件的 AutomationPeer 和 return 组件中的 ButtonAutomationPeer案件。这里的一大优势是能够对所需的每个自定义行为进行建模。 Microsoft's docu 进一步阅读
  2. 使用 Label 的 ClickablePoint,并将其与 User32.dll[=25=合并 ](在提供的坐标上触发实际的鼠标点击)。 - 另见微软 mouse_event function docu 以获取更多详细信息 - 此解决方案不需要对您的应用程序进行任何更改,但面临以下缺点:您将无法同时自动化多个应用程序,如果您不自己构建适当的子例程并且您必须注意将应用程序保持在前台(为此您可以使用 User32.dll 中的 ShowWindow function)。
  3. 正如 Maximus 已经建议的那样 使用 Button 并使其看起来像 Label。我同意他的看法,在我们的案例中这应该是一个有效的解决方法。