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