Как мне добиться динамического отображения / скрытия WPF ToolTip в XAML? - PullRequest
1 голос
/ 10 января 2011

У меня есть 3D-рендеринг, который может содержать объект под мышью. Я хочу всплывающую подсказку с информацией о сущности, и могу добиться этого с помощью приведенного ниже кода. Обратите внимание, что подсказка всегда видна, когда мышь находится над объектом, и скрыта, если нет.

// 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 Ответ

2 голосов
/ 10 января 2011

Класс всплывающей подсказки фактически реализован с использованием всплывающего класса .Вы должны попробовать то же самое выше с классом Popup.Может быть немного сложно заставить его показать, где вы этого хотите (у меня были некоторые проблемы, но я не баловался в классе достаточно).

Поведение размещения

<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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...