Скрыть всплывающую подсказку, если привязка имеет значение null
В настоящее время у меня есть следующий код для показа всплывающей подсказки.
<Border BorderBrush="Black"
BorderThickness="{Binding Border}"
Height="23"
Background="{Binding Color}">
<ToolTipService.ToolTip>
<TextBlock Text="{Binding TooltipInformation}" />
</ToolTipService.ToolTip>
Это представлено в ItemsControl с примерно 25 элементами. Только некоторые из них имеют значение, установленное на TooltipInformation
Если TooltipInforation
- пустая строка, она по-прежнему показывает панель инструментов, содержащую текстовый блок, как очень маленькое окно (около 5 пикселей в высоту и 20 пикселей в ширину). Даже если я установил, что изменчивость текстового блока свернута.
Есть ли способ полностью удалить всплывающую подсказку, если значение TooltipInformation равно null или пустая строка?
Ответы
Ответ 1
Один из способов сделать это - обернуть ToolTip
в Rectangle
и присвоить цвет Transparent
. Затем вы установите Visibility
на Collapsed
на этом Rectangle
.
Update:
<Border Background="#FFE45F5F">
<Grid>
<TextBlock Text="{Binding Property1}"/>
<Rectangle Fill="Transparent" Visibility="{Binding Property2, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTipService.ToolTip="{Binding TooltipInformation}"/>
</Grid>
</Border>
Ответ 2
Один из способов скрыть пустую всплывающую подсказку для всех элементов управления - это создать стиль в словаре ресурсов, который включен в ваш App.xaml.
Этот стиль устанавливает видимость для свертывания, когда всплывающая подсказка представляет собой пустую строку или null:
<!-- Style to hide tool tips that have an empty content. -->
<Style TargetType="ToolTip">
<Style.Triggers>
<Trigger Property="Content"
Value="{x:Static sys:String.Empty}">
<Setter Property="Visibility"
Value="Collapsed" />
</Trigger>
<Trigger Property="Content"
Value="{x:Null}">
<Setter Property="Visibility"
Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
Также укажите пространство имен sys (для String.Empty):
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Ответ 3
Если просто использовать всплывающую подсказку по умолчанию, я бы в противном случае рекомендовал бы установить значение привязки в null в режиме просмотра или использовать конвертер всякий раз, когда элемент пуст.
В моем случае у меня есть:
public string Name { get; }
Связано с использованием:
<TextBlock Text="{Binding Name}" TextTrimming="CharacterEllipsis" Tooltip="{Binding Name}" />
Если идея состоит в том, чтобы показать полное имя в подсказке, если вырезать из-за отсутствия ширины. В моей модели просмотра я просто:
if (string.IsNullOrEmpty(Name)) Name = null;
По крайней мере, в .Net 4.0 это не покажет всплывающую подсказку для меня.
Ответ 4
У меня была такая же проблема, как и при установке значения в String.Empty. Установка его на нуль решает проблему.
WinRT/Windows 8 App XAML
Ответ 5
Это ответ WPF (не пробовал в Silverlight).
Используйте ToolTipService.IsEnabled и привяжите его к свойству всплывающей подсказки. Затем используйте конвертер для преобразования строки всплывающей подсказки в bool.
Например, у меня есть следующее:
<TextBlock x:Name="textBlock" ToolTipService.IsEnabled="{Binding EntryToolTip, Converter={StaticResource StringNullOrEmptyToBoolConverter}}">
...
</TextBlock>
Или в кодировке
ToolTipService.SetIsEnabled(textBlock, false);
Ответ 6
Вы можете создать конвертер из строки в bool, который возвращает false, если длина строки равна 0 и true в противном случае, а затем привяжите ToolTip.Active к TooltipInformation с этим конвертером.