作为背景知识 - Windows 有一个适用于触控/平板电脑的功能,它可以根据您的“惯用手”改变弹出窗口/菜单的位置(以防止菜单出现在您的手下)。
本质上,如果您设置为“右手”(一旦您连接了触摸设备,它似乎默认为),您打开的每个弹出窗口都会被人为地踢到左侧 - 这会导致我们尝试的大量布局问题并将弹出窗口与它“弹出”的项目对齐:
平板电脑设置设置为左手 - 没有来自 Windows 的人为校正
平板电脑设置设置为右手 - Windows 人为调整我们的定位
我们可以使用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 弹出窗口查看此设置?
对于那些没有触控设备的用户,您可以通过运行以下命令访问 Tablet PC 设置:
C:\Windows\explorer.exe 外壳:::{80F3F1D5-FECA-45F3-BC32-752C152E456E}
看看它给自己造成的混乱:-)