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 的视线,我不确定为什么它会试图弄乱您实际指定位置的情况。
我有一个带有工具提示的 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 的视线,我不确定为什么它会试图弄乱您实际指定位置的情况。