[英]How to show ToolTip only when Text of the Dynamic Size TextBlock is trimmed?
<TextBlock x:Name="ContentHeader" Text="{x:bind Name}" ToolTipService.ToolTip="{x:Bind ContentHeader.Text,Mode=OneWay}"
ToolTipService.Placement="Right" TextTrimming="CharacterEllipsis"
Tapped="ContentHeader_Tapped" >
條件:我的 TextBlock 的寬度是根據內容確定的,我沒有明確提到任何寬度
這個問題的關鍵是通過TextBlock.IsTextTrimmed
屬性來完成轉換。 我們可以在IsTextTrimmed = False
時設置Tooltip = null
,當IsTextTrimmed = True
時將 Tooltip 設置為TextBlock.Text
。
我們不能使用ConverterParameter
來傳遞一個變化的值 ( TextBlock.Text
),因為它是一個簡單的對象,而不是一個DependencyProperty
,所以我們需要創建一個可以保存TextBlock.Text
值的 Converter。
轉換器
public class TrimConverter : DependencyObject, IValueConverter
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(TrimConverter), new PropertyMetadata(""));
public object Convert(object value, Type targetType, object parameter, string language)
{
bool isTrim = System.Convert.ToBoolean(value);
return isTrim ? Text : null;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
用法
<Page.Resources>
<local:TrimConverter x:Key="TrimConverter" Text="{Binding ElementName=TestBlock,Path=Text}"/>
</Page.Resources>
<Grid>
<TextBlock TextTrimming="CharacterEllipsis"
x:Name="TestBlock"
ToolTipService.ToolTip="{Binding ElementName=TestBlock,
Path=IsTextTrimmed,
Converter={StaticResource TrimConverter}}"/>
</Grid>
這應該可以解決您的問題。
此致。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.