如何在XAML中实现WPF ToolTip动态显示/隐藏?

时间:2011-01-10 00:01:33

标签: wpf binding

我有一个3D渲染,可能在鼠标下有一个实体。我想要一个ToolTip,其中包含有关该实体的信息,并且可以使用下面的代码实现此目的。请注意,当鼠标悬停在实体上时,提示始终可见,如果没有,则隐藏。

// Would like to do this in XAML - it must be possible but not sure how 
string toolTipString = null;
public void SetToolTipString()
{
    var e = _worldViewModel.MouseOverEntity;
    string newTip =  e == null ? null : e.Entity.Name;
    if (newTip != toolTipString)
    {
        toolTipString = newTip;
        if (newTip == null)
        {
            if (ToolTip != null)
            {
                ((ToolTip)ToolTip).IsOpen = false;
            }
            ToolTip = null;
        }
        else
        {
            ToolTip = new ToolTip { Content = toolTipString, IsOpen = true, StaysOpen = true };
        }
    }
}

我尝试了这个,但它不起作用:

<ToolTip
    StaysOpen="True"
    IsOpen="{Binding Path=PlacementTarget.DataContext.IsMouseOverEntity,
                     RelativeSource={RelativeSource Self}}"
    Content="{Binding Path=PlacementTarget.DataContext.MouseOverEntity.Entity.Name, 
                      RelativeSource={RelativeSource Self}}"/>

有没有办法在XAML中实现它?

1 个答案:

答案 0 :(得分:2)

工具提示类实际上是使用Popup class实现的。您应该使用Popup类尝试上述相同的操作。让它显示你想要的位置可能有点棘手(我遇到了一些问题,但我还没有足够的参与课程)。

Placement Behavior

<Canvas Margin="5" Background="Red" Width="200" Height="150" >
  <Ellipse Name="ellipse1"
       Canvas.Top="60" Canvas.Left="50"
       Height="85" Width="60" 
       Fill="Black"/>

  <Popup IsOpen="{Binding Path=PlacementTarget.DataContext.IsMouseOverEntity,
                 RelativeSource={RelativeSource Self}}" PlacementTarget="{Binding ElementName=ellipse1}" Content="{Binding Path=PlacementTarget.DataContext.MouseOverEntity.Entity.Name,RelativeSource={RelativeSource Self}}" />
</Canvas>

HTH