制作WPF TextBlock只会增长而不缩小?

时间:2018-01-29 06:47:56

标签: c# .net wpf vb.net wpf-controls

在我的应用中,我多次设置名为Text的{​​{1}}的{​​{1}}。

如何使TextBlock只是增长自动以适应文本,但在文本更改时不缩小?

tbkStatus每隔几秒就会发生变化,有长文本和短文本的状态。 我希望我的TextBlock能够适应最长文本的大小,即使有短文本,TextBlock也不应缩小

TextBlock

3 个答案:

答案 0 :(得分:2)

仅 Xaml 的解决方案:

<TextBlock Text="{Binding StatusText}"
           MinWidth="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth}"
           HorizontalAlignment="Left"/>

这样,每当 Width 增长时,MinWidth 也会增长。因此,控件不能缩回。

答案 1 :(得分:0)

我想您可以只听取SizeChangedLayoutUpdated等布局事件或写一些行为

在下面的示例中,基本前提是聆听这些事件中的任何一个,并强制您的控件永不缩小

  

注意这是完全未经测试的,只是一个想法,也许您可​​以设置MinWidth属性

<强>的Xaml

<TextBlock x:Name="tbkStatus" SizeChanged="OnSizeChanged"/>

代码背后

private double _lastSize;

private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
    var textBlock = sender as TextBlock;
    if (textBlock == null)
    {
        return;
    }

    if (e.WidthChanged)
    {
        if (textBlock.Width < _lastSize)
        {
            textBlock.Width = _lastSize;
        }
        _lastSize = textBlock.Width;
    }
}

同时注意

SizeChangedEventArgs类有许多属性,您可以利用

答案 2 :(得分:-1)

您可以这样做:

                    abc
                /    |     \
Level 1    a(bc)    b(ac)    c(ba)   (Here three new call to permute are made out of permute with l=1)

Goes on...

由于 <TextBlock Name="tbkStatus" Grid.Row="2" Margin="6" TextWrapping="Wrap" Text="{Binding StatusText}"/> 没有TextBlock事件,这将完成这项工作

TextChange

或者,您可以使用DependencyPropertyDescriptor dp = DependencyPropertyDescriptor.FromProperty(TextBlock.TextProperty, typeof(TextBlock)); int textLength =0 dp.AddValueChanged(tbkStatus, (object a, EventArgs b) => { if (textLength < tbkStatus.Text.Length) { textLength = tkbStatus.Text.Length; tbkStatus.Width = textLength * SomeValue; //You have to play around and see what value suits you best since it depends on font and it's size } }); 并将其设为只读并使用TextBox事件。