2015-04-21 7 views
0

Мне нужно установить высоту UiElement на основе содержимого. Я устанавливал контент в текстовый блок и задавал текстовый блок MaxWidth - некоторое значение, а MaxHeight - double.MaxValue. Теперь я установить этот TextBlock к ребенку border.nowi измерить границу, как показано нижеКак установить динамическую высоту UIElement на основе содержимого в текстовом блоке

textBlock.MaxWidth=200; 
textBlock.MaxHeight=double.MaxValue; 
var area=new Border{child=textBlock}; 
area.Measure(new size(textBlock.MaxWidth,textBlock.MaxHeight)); 
var r=area.DesiredSize; 

но выше код дает неправильный DesiredSize для различной ширины текстового блока. есть ли другой способ вычисления высоты на основе текстового содержимого.

ответ

0

Используйте следующую

<ViewBox Width="200"> 
<TexBlock Text="..." ... /> 
</ViewBox> 

Он будет адаптировать TextBlock размер, чтобы всегда прямоугольник этой ширины.

Try и скажите мне, если это решение для Вашего случая

0

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

Использование StackPanel в XAML:

<StackPanel Width="200"> 
    <Border BorderThickness="1" BorderBrush="Black"> 
     <TextBlock TextWrapping="Wrap" Text="This TextBlock will be 
      wrapped by a black Border that has the height of the TextBlock 
      and with it's Width provided from the StackPanel"/> 
    </Border> 
</StackPanel> 

Или изменить TextBlock высоту программно:

<Border x:Name="border" BorderBrush="Black" BorderThickness="1" Height="100" Width="200"> 
    <TextBlock x:Name="textBlock" Background="Black" Width="40" Height="40"/> 
</Border> 

И тогда ваш код просто: border.Height = textBlock.Height;

0
<Border Width="300" BorderThickness="1" BorderBrush="Black"> 
    <TextBlock Text="welcome" Foreground="Blue"/> 
    </Border>