WPF 文字換行TextWrapping 顯示不全用省略號TextTrimming 顯示不全彈提示內容ToolTip
阿新 • • 發佈:2019-01-10
aml aaa esp tails ipc tool except idt else 原文:WPF 文字換行TextWrapping 顯示不全用省略號TextTrimming 顯示不全彈提示內容ToolTip
【TextBlock】
換行? ? TextWrapping="Wrap"
內容顯示不全時顯示省略號,如 “AAA...”? ??TextTrimming="CharacterEllipsis" //以單詞邊界做截斷
鼠標提示? ?<ToolTip>
?
例:??
TextBlock不允許換行,超出後顯示省略號截斷,超出的情況鼠標移上去會彈出提示內容。
?①? .xaml
<!--xaml 內容不允許換行,顯示不下用省略號--> <TextBlock TextTrimming="CharacterEllipsis" Width="150" TextWrapping="NoWrap" Text="AAAA"> <TextBlock.ToolTip> <ToolTip Style="{DynamicResource TooltipStyle}" Content="BBB"/> </TextBlock.ToolTip> </TextBlock>
?② ToolTip樣式定義
屬性Visibility綁定轉換器,僅當內容顯示不全時彈出
<Style x:Key="TooltipStyle" TargetType="{x:Type ToolTip}"> <Setter Property="MaxWidth" Value="228"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="Background" Value="#FF565656"/> <Setter Property="FontFamily" Value="{DynamicResource BaseFontFamily}"/> <Setter Property="FontSize" Value="14"/> <Setter Property="Foreground" Value="#FFFFFFFF"/> <!--內容顯示不全時彈出--> <Setter Property="Visibility" Value="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget, Converter={StaticResource TrimToolTipConverter}}"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToolTip}"> <Border CornerRadius="4" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> <TextBlock Padding="8,4" Margin="0,-1,0,0" TextWrapping="Wrap" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}" Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}"> </TextBlock> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>
?
?③ Converter轉換器
判斷TextBlock是否啟用Trim屬性(內容顯示不下),啟用了則ToolTip可視
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
namespace ui.DataConverter
{
/// <summary>
/// 文字顯示不下通過ToolTip提示顯示
/// </summary>
public class TrimmedTextBlockVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
{
return Visibility.Collapsed;
}
TextBlock textBlock = (TextBlock)value;
bool isTrim = IsTextTrimmed(textBlock);
if (isTrim)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
/// <summary>
/// 判斷當前顯示的內容是否顯示不全被截斷
/// </summary>
/// <param name="textBlock"></param>
/// <returns></returns>
private bool IsTextTrimmed(TextBlock textBlock)
{
Typeface typeface = new Typeface(
textBlock.FontFamily,
textBlock.FontStyle,
textBlock.FontWeight,
textBlock.FontStretch);
FormattedText formattedText = new FormattedText(
textBlock.Text,
System.Threading.Thread.CurrentThread.CurrentCulture,
textBlock.FlowDirection,
typeface,
textBlock.FontSize,
textBlock.Foreground);
bool isTrimmed = formattedText.Width > textBlock.Width;
return isTrimmed;
}
}
}
?
WPF 文字換行TextWrapping 顯示不全用省略號TextTrimming 顯示不全彈提示內容ToolTip