簡體   English   中英

如何僅在修剪動態大小文本塊的文本時顯示工具提示?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM