В качестве небольшого фона - в Windows есть средство для Touch / TabletPC, с помощью которого оно смещает положение всплывающих окон / меню в зависимости от вашей «руки» (для предотвращения появления меню под вашей рукой).
По сути, это происходит, если вы настроены на «правую руку» (которая, по-видимому, используется по умолчанию после подключения сенсорного устройства), каждое открываемое всплывающее окно искусственно отбрасывается влево - это вызывает серьезные проблемы с макетом. где мы пытаемся выстроить всплывающее окно с элементом, с которого оно «всплыло»:
В настройках планшетного ПК установлено значение Левша - без искусственной коррекции из Windows
![Tablet PC Settings set to Left handed - no artificial correction from Windows](https://i.stack.imgur.com/NY33t.jpg)
В настройках планшетного ПК установлено значение «Правша» - Windows искусственно настраивает наше расположение
![Tablet PC Settings set to Right handed - Windows artificially adjusts our positioning](https://i.stack.imgur.com/ruH8E.jpg)
Мы можем определить, на что установлен этот параметр, с помощью SystemParameters.MenuDropAlignment , и для тривиальных всплывающих окон мы можем отрегулировать это, используя фактическую ширину всплывающего окна - но для динамических всплывающих окон и когда мы бросаем справа налево поддержка в миксе, это просто не работает.
В настоящее время представляется более вероятным, что нам нужно будет просмотреть все всплывающие окна, вручную определить значение, чтобы отрегулировать удар, и добавить к каждому что-то подобное:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Source={x:Static SystemParameters.MenuDropAlignment}}" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=FlowDirection}" Value="RightToLeft"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="HorizontalOffset" Value="-50"/> <!-- Set to arbitrary value to test -->
</MultiDataTrigger.Setters>
</MultiDataTrigger>
Итак ... вернемся к вопросу :-) Кто-нибудь знает, как остановить всплывающее окно WPF, глядя на этот параметр вообще?
Для тех, у кого нет сенсорного устройства, вы можете получить доступ к настройкам планшетного ПК, запустив:
C: \ Windows \ explorer.exe shell ::: {80F3F1D5-FECA-45F3-BC32-752C152E456E}
И посмотрите, какой беспорядок это сделает для себя: -)