У вас могут быть две проблемы ...
NameScoping ...
У привязки ElementName есть строгие ограничения относительно NameScoping ...
В основном, когда ElementName используется в привязке, NameScope целевого объекта используется для поиска элемента с указанным именем.Если у этого элемента отсутствует NameScope, метод FrameworkElement.FindScope продолжает подниматься по логическому дереву и возвращается к контексту наследования, если логического родителя нет.Область имен - это объект, в котором были зарегистрированы все именованные объекты.
Так что в вашем случае ссылаться на элемент вне контекста всплывающей подсказки не удается.Теперь, чтобы это работало правильно, вам нужно будет преодолеть нарушенную область, используя что-то вроде Tag
свойство ...
<Rectangle Tag="{Binding ElementName tbUserName}" ...>
<Rectangle.ToolTip>
<ToolTip ...>
<ToolTip.Visibility ... >
<MultiBinding>
<Binding Path="Data.Name" />
<Binding Path="Tag"
RelativeSource="{RelativeSource
AncestorType={x:Type Rectangle}}" ...>
Видимость подсказки
вместопривязывая к видимости всплывающей подсказки, вы можете использовать триггер данных с несколькими привязками для самого прямоугольника и установить нужную подсказку, основываясь на значении условия ...
<Window.Resources>
<local:TooltipVisibilityConverter x:Key="TooltipVisibilityConverter"/>
<TextBlock x:Key="MyToolTip" Text="{Binding Data.Name}"/>
</Window.Resources>
<!-- Rest of the code --->
<Rectangle.Style>
<Style TargetType="{x:Type Rectangle}">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding
Converter="{StaticResource
TooltipVisibilityConverter}">
<MultiBinding.Bindings>
<Binding Path="Data.Name"/>
<Binding ElementName="HelloTB"/>
</MultiBinding.Bindings>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="ToolTip"
Value="{StaticResource MyToolTip}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
Обратите внимание, что TooltipVisibilityConverter
сейчасдля простоты возвращает логическое значение.