TextBlock, заполняющий вертикальное пространство - PullRequest
2 голосов
/ 27 августа 2009

Я хочу создать TextBlock (или какой-либо другой элемент с текстом в нем только для отображения), который является вертикальным (угол преобразования -90), но я хочу, чтобы этот элемент заполнил вертикальное пространство, в котором он содержится, но у меня есть определенное горизонтальное количество (я использую вертикальные и горизонтальные термины вместо высоты и ширины, так как оно поменяется местами, когда у меня TextBlock идет вертикально), и выровняло его по левой стороне контейнера.

Мне кажется, я понимаю, как заставить TextBlock двигаться по вертикали, используя RenderTransform или LayoutTransform. Тем не менее, я не могу заставить 'стыковку' работать должным образом, всякий раз, когда я изменяю вертикальный аспект контейнера, TextBlock увеличивается в горизонтальном аспекте вместо вертикального.

Вот что у меня есть:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="AttendanceTracker.StudentView"
x:Name="UserControl" Height="172.666" Width="417.333">

<StackPanel x:Name="LayoutRoot" Orientation="Horizontal">
    <Border BorderBrush="Black" BorderThickness="1" RenderTransformOrigin="0.5,0.5" Background="#52FFFFFF" Width="139.667">
        <TextBlock Text="My Title" TextWrapping="Wrap" FontSize="18.667" TextAlignment="Center" Foreground="White" Margin="-58.509,68.068,49.158,70.734" Background="Black" RenderTransformOrigin="0.5,0.5" Width="147.017" d:LayoutOverrides="Height">
            <TextBlock.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform Angle="-90"/>
                    <TranslateTransform/>
                </TransformGroup>
            </TextBlock.RenderTransform>
        </TextBlock>
    </Border>
</StackPanel>

Измените высоту UserControl, и вы заметите, что TextBlock увеличивается в горизонтальном направлении вместо желаемого вертикального.

1 Ответ

6 голосов
/ 27 августа 2009

Если я вас правильно понимаю, то это должно указать вам правильное направление:

<StackPanel Orientation="Horizontal">
    <TextBlock Background="Red" Text="My Title">
        <TextBlock.LayoutTransform>
            <TransformGroup>
                <RotateTransform Angle="90"/>
            </TransformGroup>
        </TextBlock.LayoutTransform>
    </TextBlock>
</StackPanel>

Ключ должен использовать LayoutTransform, а не RenderTransform. Это обеспечит повторный проход макета после преобразования. В противном случае система макетов использует исходный ограничивающий прямоугольник для компоновки TextBlock.

Кроме того, я только что избавился от всего сгенерированного Блендом сгустка, чтобы посмотреть, что происходит. Вот результат:

альтернативный текст http://img187.imageshack.us/img187/1189/screenshottbv.png

...