WPF检测TextBlock 显示不全悬壶提示ToolTip
Measure测量检测
效果如下:
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>
浙公网安备 33010602011771号