Как я могу определить, обрезается ли мой текстовый блок?

37
задан Andrew Jackson 25 June 2009 в 01:52
поделиться

2 ответа

В последнее время я не очень много работал с WPF, поэтому не уверен, что это именно то, что вы ищете, но посмотрите эту статью: Настройка «привлекательных» элементов управления WPF - Take 2 . Это немного сложно, но, похоже, отвечает на тот же вопрос, который вы задаете. ОБНОВЛЕНИЕ: веб-сайт вроде исчез, но вы можете найти статью в архиве .

9
ответ дан 27 November 2019 в 04:59
поделиться

Я имел маленькую проблему с помощью ответа Alex и должен был изменить мою логику немного, чтобы разъясниться, обрезался ли текст в текстовом блоке.

var formattedText = new FormattedText(
            Text, System.Threading.Thread.CurrentThread.CurrentCulture, FlowDirection, typeface, FontSize,
            Foreground, VisualTreeHelper.GetDpi( this ).PixelsPerDip ) { MaxTextWidth = ActualWidth };
        //Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));

 return ( Math.Floor(formattedText.Height ) > ActualHeight || Math.Floor( formattedText.MinWidth ) > ActualWidth;

Это работает отлично на меня.

я определил пользовательский элемент управления, который был TextBlock с включенным замещающим знаком. Тогда я определил 2 функции для OnMouseUp и OnMouseDown, так, чтобы, когда пользователь нажал на textblock, который имел переполнение, это отобразит подсказку с полной стоимостью.

Это - функция OnMouseDown

private void TextBlockWithToolTipView_OnMouseDown(
        object sender,
        MouseButtonEventArgs e )
    {
        var typeface = new Typeface(
            FontFamily,
            FontStyle,
            FontWeight,
            FontStretch);

        var formattedText = new FormattedText(
            Text, System.Threading.Thread.CurrentThread.CurrentCulture, FlowDirection, typeface, FontSize,
            Foreground, VisualTreeHelper.GetDpi( this ).PixelsPerDip ) { MaxTextWidth = ActualWidth };

        if (Math.Floor(formattedText.Height) > ActualHeight || Math.Floor(formattedText.MinWidth) > ActualWidth )
        {
            if( ToolTip is ToolTip tt )

            {
                {
                    if( tt.PlacementTarget == null )
                    {
                        tt.PlacementTarget = this;
                    }

                    tt.IsOpen = true;
                    e.Handled = true;
                }
            }
        }
    }

, И это было битом Xaml

<TextBlock 
         ToolTipService.IsEnabled="True"
         MouseDown="TextBlockWithToolTipView_OnMouseDown"
         MouseLeave="TextBlockWithToolTipView_OnMouseLeave"   
         TextTrimming="CharacterEllipsis"
         TextWrapping="WrapWithOverflow">
<TextBlock.ToolTip>
        <ToolTip 
            DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}">
        <TextBlock Text="{Binding Path=Text, Mode=OneWay }"
                       TextWrapping="Wrap"/>
        </ToolTip>
    </TextBlock.ToolTip>
</TextBlock>
0
ответ дан 27 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: