如何在代码隐藏中显示工具提示?下面的代码更好地定义了我的问题。显然,我不希望代码检查鼠标位置等,只是如何显示工具提示。
private void UIElement_OnMouseMove(object sender, MouseEventArgs e)
{
// if mouse position equals certain coordinates show the tooltip
}
答案 0 :(得分:8)
试试这样:
if (control.ToolTip != null)
{
// Main condition
if (control.ToolTip is ToolTip)
{
var castToolTip = (ToolTip)control.ToolTip;
castToolTip.IsOpen = true;
}
else
{
toolTip.Content = control.ToolTip;
toolTip.StaysOpen = false;
toolTip.IsOpen = true;
}
}
必需Main condition
,因为控件的ToolTip
可以通过两种方式设置:
First approach
<Button Name="TestButton"
ToolTip="TestToolTip" />
这种方法最常见。在这种情况下,ToolTip的内容将是对象而不是ToolTip
的类型。
<强> Second approach
强>
<Button Name="TestButton"
Content="Test">
<Button.ToolTip>
<ToolTip>TestToolTip</ToolTip>
</Button.ToolTip>
</Button>
与此相同:
<Button Name="TestButton"
Content="Test">
<Button.ToolTip>
TestToolTip
</Button.ToolTip>
</Button>
在这种情况下,工具提示的内容类型将为Tooltip
。请注意,在第二种情况下,对象会自动在行TestToolTip
上填充ToolTip对象,因此这种方法的工作速度会慢一些。
因此,当我们尝试在此处向工具提示分配ToolTip
类型的内容时,需要进行此检查以避免异常:
toolTip.Content = control.ToolTip;
以下是一个完整的例子:
XAML
<Grid>
<Button Name="TestButton"
Width="100"
Height="25"
Content="Test"
ToolTip="TestToolTip" />
<Button Name="ShowToolTip"
VerticalAlignment="Top"
Content="ShowToolTip"
Click="ShowToolTip_Click" />
</Grid>
Code-behind
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ShowToolTip_Click(object sender, RoutedEventArgs e)
{
var toolTip = new ToolTip();
if (TestButton.ToolTip != null)
{
if (TestButton.ToolTip is ToolTip)
{
var castToolTip = (ToolTip)TestButton.ToolTip;
castToolTip.IsOpen = true;
}
else
{
toolTip.Content = TestButton.ToolTip;
toolTip.StaysOpen = false;
toolTip.IsOpen = true;
}
}
}
}