В некотором роде - у Windows есть возможность для Touch/TabletPCs, благодаря чему она сдвигает положение всплывающих окон/меню в зависимости от вашей "ручности" (чтобы предотвратить появление меню под рукой).
По сути, это означает, что если вы настроены на "правую руку" (по умолчанию это означает, что когда вы подключили сенсорное устройство), каждое всплывающее окно, которое вы открываете, искусственно ударяется влево - это вызывает массовые проблемы с макетом где мы пытаемся выстроить всплывающее окно с элементом, который он "выскочил":
Настройки планшетного ПК установлены на левую сторону - нет искусственной коррекции из Windows
Настройки планшетного ПК установлены вправо - Windows искусственно настраивает наше позиционирование
Мы можем определить, для чего этот параметр установлен с помощью SystemParameters.MenuDropAlignment, а для тривиальных всплывающих окон мы можем настроить это, используя фактическую ширину popup - но для динамических всплывающих окон и когда мы добавляем поддержку справа налево в микс, это просто не работает.
В настоящее время более вероятно, что нам придется проходить через каждое всплывающее окно, вручную выработать значение, чтобы настроить удар, и добавить что-то вроде этого каждому:
<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}
И посмотрите, что это делает для себя: -)