Можно ли щелкнуть элемент управления меткой в ​​приложении WPF/WinForm с помощью Microsoft Automation UI

В нашем приложении у нас есть кликабельная метка, которая открывает другое окно. Я читал документацию по пользовательскому интерфейсу Microsoft Automation и не могу найти способ щелкнуть элемент управления меткой.

Я знаю, что не могу использовать Invoke Pattern, так как это касается только элементов управления Button.

Ниже приведен код из 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>

2 ответа

Решение

Мой совет - использовать кнопку. Он происходит от интерфейса ICommandSource, и поэтому вы можете легко использовать Command для связывания Button с обработчиком. Спросите себя: какую функциональность Label предоставляет, а Button нет? Лучше выглядеть? Переопределите шаблон кнопки по умолчанию, и вы получите эквивалентный вид. Пока вы не воспользуетесь какой-либо дополнительной функциональностью Label, я не вижу смысла возиться с ней.

У меня есть 3 варианта решения этой проблемы с моей точки зрения:

  1. Подход автоматизации пользовательского интерфейса заключается в переопределении AutomationPeer вашего компонента и возврате ButtonAutomationPeer в вашем случае. Большим преимуществом здесь является способность моделировать любое требуемое поведение. Документ Microsoft для дальнейшего чтения
  2. Используйте ClickablePoint вашей метки и объедините его с Win32.dll (чтобы запустить фактический щелчок мышью по указанным координатам). Это решение не требует внесения каких-либо изменений в ваше приложение, но имеет следующий недостаток: вы не сможете автоматизировать несколько приложений одновременно, если не создадите надлежащие подпрограммы самостоятельно.
  3. Как уже предложено Maximus, используйте кнопку и сделайте ее похожей на ярлык. Я согласен с ним, что в нашем случае это должен быть действительный обходной путь.
Другие вопросы по тегам