WPF:工具提示放置在触摸屏上表现不同

WPF: Tooltip Placement behaves different on touchscreen

我有一个带有工具提示的 ToggleButton:

            <ToggleButton Height="32" Width="32">
                <Image Width="16" Height="16" Source="{someImage} />
                <ToggleButton.ToolTip>
                    <ToolTip Placement="Left" HorizontalOffset="-5">
                        <TextBlock Text="Search"/>
                    </ToolTip>
                </ToggleButton.ToolTip>
            </ToggleButton>

在我的电脑上(常规屏幕,Windows 8.1)工具提示显示在我的按钮左侧,这是正确的(见图)。

但是,在带有触摸屏的电脑上,工具提示显示在右侧(当鼠标悬停在上方时)。即使 PC 有 2 个屏幕,一个是触摸屏,另一个是普通屏幕,工具提示在两个屏幕上都显示在右侧。

两台 PC 运行 相同 OS 和 .Net 版本。

当我将位置更改为 "Right" 时,工具提示在没有触摸屏的电脑上显示在右侧,在有触摸屏的电脑上显示在左侧。

为什么会有不同?我该怎么做才能使工具提示始终显示在按钮的左侧?

你可以试试这个……我刚刚在那边写了重要的……可能有用……

 <ToggleButton Height="32" Width="32">
            <Image Width="16" Height="16"Source="{someImage} />
            <ToggleButton.ToolTip>
                <ToolTip Placement="Left !important" HorizontalOffset="-5">
                    <TextBlock Text="My Tooltip"/>
                </ToolTip>
            </ToggleButton.ToolTip>
        </ToggleButton>

仍然不知道为什么它不能正确地使用原始代码,但我找到了 fix/workaround:

我已将 Placement 设置为 Custom,并实现了 ToolTipOpening 事件处理程序。在那里,我使用 CustomPopupPlacementCallback 委托手动设置工具提示的位置:

XAML:

            <ToggleButton Height="32" Width="32" ToolTipOpening="Button_OnToolTipOpening">
                <Image Width="16" Height="16" Source="{someImage} />
                <ToggleButton.ToolTip>
                    <ToolTip Placement="Left" HorizontalOffset="-5">
                        <TextBlock Text="Search"/>
                    </ToolTip>
                </ToggleButton.ToolTip>
            </ToggleButton>

C#:

    private void Button_OnToolTipOpening(object sender, ToolTipEventArgs e)
    {
        var button = sender as ToggleButton;
        if (button == null) return;
        var toolTip = button.ToolTip as ToolTip;
        if (toolTip != null)
        {
            toolTip.PlacementTarget = button;
            toolTip.Placement = PlacementMode.Custom;
            toolTip.CustomPopupPlacementCallback = delegate
            {
                double offsetY = (button.Height - toolTip.ActualHeight) / 2;
                double offsetX = -toolTip.ActualWidth - 5;

                return new CustomPopupPlacement[] { new CustomPopupPlacement(new Point(offsetX, offsetY), PopupPrimaryAxis.Horizontal) };
            };
        }
    }

您所描述的可能是由您的 PC 的触摸设置引起的,这些设置隐藏得很好。我们遇到了完全相同的问题并更改它们为我们解决了它(尽管我们花了很长时间才找到这个......)。使用此解决方案意味着它必须应用于每个安装,因此它可能并非在所有情况下都实用。

通过以下方式更改这些设置:

控制面板 --> 硬件和声音 --> 平板电脑设置。

选择 "Other" 选项卡,然后将您的设置从 right-handed 更改为 left-handed 或 vice-versa。

对于 Windows10 的某些版本,此路径不再可用,您可以通过按 Windows 键 + R 打开 运行 框来到达那里。键入以下命令并按 Enter.

shell:::{80F3F1D5-FECA-45F3-BC32-752C152E456E}

https://www.top-password.com/blog/fix-windows-10-opens-right-click-context-menu-to-left-side/

此设置旨在防止用户用手指挡住 pop-up 的视线,我不确定为什么它会试图弄乱您实际指定位置的情况。