如何在代码隐藏中显示工具提示?下面的代码更好地定义了我的问题。显然,我不希望代码检查鼠标位置等,而只是如何显示工具提示。
private void UIElement_OnMouseMove(object sender, MouseEventArgs e)
{
// if mouse position equals certain coordinates show the tooltip
}
最佳答案
尝试这样:
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
,因为可以通过两种方法设置Control的ToolTip
:First approach
<Button Name="TestButton"
ToolTip="TestToolTip" />
这种方法是最常见的。在这种情况下,工具提示的内容将成为对象,而不是
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时,需要进行此检查以避免出现异常: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;
}
}
}
}
关于c# - 如何在WPF中的代码背后显示工具提示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23041768/