WPF检测TextBlock 显示不全悬壶提示ToolTip

Measure测量检测

效果如下:
image.png

1 设计转换器检测

 public class TrimmedTextBlockVisibilityConverter : IValueConverter
 {
    public object Convert(object value, Type targetType, object parameter,     System.Globalization.CultureInfo culture)
    {
    if (value == null) return Visibility.Collapsed;
    FrameworkElement textBlock = (FrameworkElement)value;
    textBlock.Measure(new System.Windows.Size(Double.PositiveInfinity,     Double.PositiveInfinity));
    return textBlock.ActualWidth - textBlock.Margin.Left - textBlock.Margin.Right <       textBlock.DesiredSize.Width ? Visibility.Visible : Visibility.Collapsed;
    }
     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     {
         throw new NotImplementedException();
     }
 }    

2 控件应用

<UserControl
    x:Class="LinseerCopilot.Controls.HistoricalRecordsItem"
    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:styles="clr-namespace:LinseerCopilot"
    d:DesignHeight="450"
    d:DesignWidth="800"
    PreviewMouseLeftButtonDown="UserControl_OnPreviewMouseLeftButtonDown"
    PreviewMouseRightButtonDown="UserControl_OnPreviewMouseRightButtonDown"
    mc:Ignorable="d">
    <UserControl.Resources>    
        <styles:TrimmedTextBlockVisibilityConverter x:Key="TrimmedTextBlockVisibilityConverter" />
        <Style x:Key="CustomToolTipStyle" TargetType="ToolTip">
            <Setter Property="Foreground" Value="White" />
            <Setter Property="BorderThickness" Value="1" />
            <Setter Property="Padding" Value="10" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ToolTip">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="8" />
                            </Grid.RowDefinitions>
                            <Border
                                x:Name="RootBorder"
                                Grid.Row="0"
                                Padding="6"
                                HorizontalAlignment="Left"
                                VerticalAlignment="Center"
                                Background="#E5000000"
                                BorderBrush="#E5000000"
                                BorderThickness="1"
                                CornerRadius="8">
                                <ContentPresenter />
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>
    <Border
        x:Name="RootBorder"
        Width="{Binding Width, RelativeSource={RelativeSource AncestorType=UserControl}}"
        Padding="6,5"
        BorderThickness="1"
        CornerRadius="8">
            <TextBlock
                VerticalAlignment="Center"
                FontSize="15"
                Foreground="#000000"
                Text="{Binding SessionName, RelativeSource={RelativeSource AncestorType=UserControl}, Mode=OneWay, Converter={StaticResource StringTruncateConverter}}"
                TextTrimming="CharacterEllipsis"
                TextWrapping="NoWrap"  
                ToolTipService.HorizontalOffset="40"
                ToolTipService.VerticalOffset="-5"
                ToolTipService.InitialShowDelay="100"
                ToolTipService.Placement="Right">
                <TextBlock.ToolTip>
                    <ToolTip Style="{StaticResource CustomToolTipStyle}" Visibility="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget, Converter={StaticResource TrimmedTextBlockVisibilityConverter}}">
                        <TextBlock
                            MaxWidth="400"
                            Foreground="#E5FFFFFF"
                            Text="{Binding PlacementTarget.Text, RelativeSource={RelativeSource AncestorType=ToolTip}, Mode=OneWay}"
                            TextWrapping="Wrap" />
                    </ToolTip>
                </TextBlock.ToolTip>
            </TextBlock>       
    </Border>
</UserControl>

posted on 2025-08-14 10:27  TanZhiWei  阅读(21)  评论(0)    收藏  举报