这确实是一个奇怪的问题,我希望有人知道如何解决。
情况:
-
我们的 WPF 项目有一个表单,我们在其中显示上下文菜单(ContextMenu 控件)和弹出窗口(Popup 控件)以响应某些用户操作。在大多数情况下,它发生在鼠标单击某个文本块时。
这是一个例子:
popup = new Popup {
Placement = PlacementMode.Relative,
PlacementTarget = textBlock,
StaysOpen = false
};
. . . . .
//later on mouse click:
popup.IsOpen = true;
弹出窗口必须与其放置目标(我们示例中的某些文本块)的左上角对齐,因此 - 与其重叠。除了具有平板电脑模式的 Windows 10 计算机(例如 MS Surface Pro)之外,它在所有情况下都能正常工作。
在这种环境中,我们的弹出窗口出现在放置目标的左侧,因此不要与它们重叠。
我们发现发生这种情况是因为本文中描述的特殊 Windows 10 选项:http://www.isunshare.com/windows-10/show-context-menu-on-left-or-right-in-windows-10.html http://www.isunshare.com/windows-10/show-context-menu-on-left-or-right-in-windows-10.html
该选项默认设置为“右手”(这是可以理解的),但我不明白为什么它会以这种方式影响弹出控件以及为什么它甚至在桌面模式下也会发生。
如果能找到一种方法来更改此默认行为并使我们的弹出窗口在任何情况下都与父控件的左上角对齐,那就太好了。
有人知道该怎么做吗?
您可以指定一个PlacementRectangle
:
<Border Width="300" Height="20" Background="Yellow">
<Popup IsOpen="True" Placement="Left">
<Popup.PlacementRectangle>
<Rect X="0" Y="20" Width="0" Height="0" />
</Popup.PlacementRectangle>
<Border Width="100" Height="100" Background="Blue"></Border>
</Popup>
</Border>
即使使用右手平板电脑模式,它看起来也像这样:
这里的技巧是Y
属性设置为正确的高度。如果您有固定高度的弹出窗口,那可能没问题。否则你可以尝试 bing 到内容的ActualHeight
,但作为Rect.Y
不是您需要转换器的依赖属性double
to Rect
为了这个目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)