我有一个带有工具提示的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>在我的PC (常规屏幕,Windows8.1)上,工具提示显示在我按钮的左边,这是正确的(见图)。

然而,在带有触摸屏的pc上,工具提示显示在右边(鼠标悬停时)。即使PC有两个屏幕,一个是触摸屏,另一个是普通屏幕,工具提示在两个屏幕上都显示在右边。
两台PC都运行着相同的操作系统和.Net版本。
当我将布局更改为“右”时,工具提示显示在没有触摸屏的pc上的右边,在带有触摸屏的pc上显示在左侧。
为什么不同,我能做什么,工具提示总是显示在按钮的左边?
发布于 2015-07-15 12:07:09
仍然不知道为什么原始代码不能正确工作,但我找到了一个修复/解决方案:
我已经将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) };
};
}
}发布于 2015-07-15 09:42:23
你可以试试这个。我刚刚在那边写了重要的东西..。可能有用..。
<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>https://stackoverflow.com/questions/31426491
复制相似问题