Show WPF Tooltip if needed Show WPF Tooltip if needed wpf wpf

Show WPF Tooltip if needed


I figured it out, the Tooltip has PlacementTarget property that specifies the UI element that has the Tooltip. In case anyone needs it:

<TextBlock Text="{Binding Text}">    <TextBlock.ToolTip>        <ToolTip              DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}"              Visibility="{Binding Converter={StaticResource toolVisConverter}}">             <TextBlock Text="{Binding Text}"/>  <!-- tooltip content -->         </ToolTip>    </TextBlock.ToolTip></TextBlock>

And then write a Converter that converts TextBlock to Visibility (based on TextBlock width).


Ok, so why do it the hard XAML-only way? This works:

<TextBlock Text="{Binding Text}"     IsMouseDirectlyOverChanged="TextBlock_IsMouseDirectlyOverChanged" >     <TextBlock.ToolTip>     <ToolTip Visibility="Collapsed">         <TextBlock Text="{Binding Text}"></TextBlock>     </ToolTip>     </TextBlock.ToolTip></TextBlock>

in Control.xaml.cs:

private void TextBlock_IsMouseDirectlyOverChanged(object sender, DependencyPropertyChangedEventArgs e){    bool isMouseOver = (bool)e.NewValue;    if (!isMouseOver)        return;    TextBlock textBlock = (TextBlock)sender;    bool needed = textBlock.ActualWidth >         (this.listView.View as GridView).Columns[2].ActualWidth;    ((ToolTip)textBlock.ToolTip).Visibility =         needed ? Visibility.Visible : Visibility.Collapsed;}


I would think you have to look at a ControlTemplate trigger to solve this problem. Unfortunately ControlTemplate triggers always compare with a specific value, not less than or greater than. You can make it appear e.g. if the Width = 100, not Width < 100.