Подтвердить что ты не робот

Скрыть всплывающую подсказку, если привязка имеет значение 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 или пустая строка?

4b9b3361

Ответ 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 с этим конвертером.