gpt4 book ai didi

c# - Windows 10 上的 ContextMenu 和 Popup WPF 控件对齐错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:02 26 4
gpt4 key购买 nike

这真是个奇怪的问题,我希望有人知道如何解决。情况:

  1. 我们的 WPF 项目有一个表单,我们在该表单上显示上下文菜单(ContextMenu 控件)和弹出窗口(Popup 控件)以响应某些用户操作。在大多数情况下,它发生在鼠标单击某些文本 block 时。这是一个例子:

            popup = new Popup {
    Placement = PlacementMode.Relative,
    PlacementTarget = textBlock,
    StaysOpen = false
    };

    . . . . .
    //later on mouse click:
    popup.IsOpen = true;
  2. 弹出窗口必须与其放置目标(我们示例中的某个文本 block )的左上角对齐,因此 - 与其重叠。它在所有情况下都能正常工作,除了具有平板电脑模式的 Windows 10 机器(如 MS Surface Pro)。在此类环境中,我们的弹出窗口出现在放置目标的左侧,因此 - 不要与它们重叠。

我们发现它的发生是由于本文中描述的特殊 Windows 10 选项: http://www.isunshare.com/windows-10/show-context-menu-on-left-or-right-in-windows-10.html

此选项默认设置为“右手”(这是可以理解的),但我不明白为什么它会以这种方式影响 Popup 控件以及为什么它甚至在桌面模式下也会发生。

如果能找到一种方法来更改此默认行为并使我们的 Popup 在任何情况下都显示为与父控件的左上角对齐,那就太好了。有人知道怎么做吗?

最佳答案

您可以指定一个 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>

看起来像这样,即使使用右手平板电脑模式也是如此:

enter image description here

此处的 hack 是将 Y 属性设置为正确的高度。如果你有一个固定高度的弹出窗口,那可能没问题。否则,您可以尝试绑定(bind)到内容的 ActualHeight,但由于 Rect.Y 不是依赖属性,您需要一个从 doubleRect 用于此目的。

关于c# - Windows 10 上的 ContextMenu 和 Popup WPF 控件对齐错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com