试试这样:
if (control.ToolTip != null)
{
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
可以通过两种方式设置控件:
第一种方法
<Button Name="TestButton"
ToolTip="TestToolTip" />
这种方法是最常见的。在这种情况下,工具提示的内容将是对象,而不是 ToolTip
类型。
第二种方法
<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的内容类型将为
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>
代码后置
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;
}
}
}
}