I want to hide empty ToolTips
this is what worked up to a certain Point:
<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>
Problem is: Trigger only operates on null or string.IsEmpty I want to catch whitespace tooltips as well.
so I tried:
<Style TargetType="ToolTip">
<Setter Property="Visibility">
<Setter.Value>
<Binding > <!------------ what comes here? -->
<Binding.Converter>
<loc:NotEmptyToVisibilityConverterEx/>
</Binding.Converter>
</Binding>
</Setter.Value>
</Setter>
</Style>
My Problem is, I'm not able to (dunno how) access the actual tooltip text.
[ValueConversion(typeof(string), typeof(Visibility))]
public class NotEmptyToVisibilityConverterEx : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
var visible = !string.IsNullOrEmpty(((string) value).Trim());
return visible ? Visibility.Visible : Visibility.Collapsed;
}
}
Anybody have an idea?
This should work:
<Window x:Class="HideEmptyToolTipsWithTrigger.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:HideEmptyToolTipsWithTrigger"
xmlns:system="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:EmptyToolTipToBooleanConverter x:Key="EmptyToolTipToBooleanConverter" />
<Style TargetType="ToolTip">
<Style.Triggers>
<DataTrigger Binding="{Binding Content, RelativeSource={RelativeSource Self}, Converter={StaticResource EmptyToolTipToBooleanConverter}}" Value="True">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<TextBlock Text="This TextBlock has ToolTip" ToolTip="Almafa"></TextBlock>
<TextBlock Text="This TextBlock has ToolTip with whitespaces" ToolTip=" "></TextBlock>
<TextBlock Text="This TextBlock has ToolTip with empty string" ToolTip="{x:Static system:String.Empty}"></TextBlock>
</StackPanel>
</Window>
And the converter:
public class EmptyToolTipToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var contentAsString = value as string;
if (contentAsString != null)
{
return string.IsNullOrEmpty(contentAsString.Trim());
}
else
{
return false;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Note that a ToolTip
can have any custom content, not just a string
.
For example:
<TextBlock Text="This TextBlock has a complex ToolTip">
<TextBlock.ToolTip>
<StackPanel>
<TextBlock Text="First line"></TextBlock>
<TextBlock Text="Second line"></TextBlock>
</StackPanel>
</TextBlock.ToolTip>
</TextBlock>
This converter shows these tooltips.