Отображение не прямоугольной формы TextBlock - PullRequest
4 голосов
/ 26 августа 2011

Я хочу отображать текст в треугольной области.Но я не могу понять, как изменить форму TextBlock, чтобы текст отображался в треугольной области вместо обычной прямоугольной области.

Вот упрощенный код моего UserControl:

<Grid >
    <Image Height="100" Width="100" />   <!-- Some triangular image -->
    <TextBlock Height="100" Width="100" Text="This text should fill up the triangualr image area"/>
</Grid>

Ответы [ 3 ]

1 голос
/ 26 августа 2011

Ну, это решение для перерасхода, но содержимое внутренней сетки будет иметь треугольную форму, если будет следовать что-то похожее:

 <Grid>
   <Image Height="200" Width="200" />
   <Grid Width="200">
        <Grid.RowDefinitions>
             <RowDefinition />
             <RowDefinition />
             <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
             <ColumnDefinition />
             <ColumnDefinition />
             <ColumnDefinition />
             <ColumnDefinition />
             <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="1" Text="Line 1" HorizontalAlignment="Center"/>
        <TextBlock Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Text="This is Line 2." HorizontalAlignment="Center"/>
        <TextBlock Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="5" Text="This is Line 3. Wud be longest." HorizontalAlignment="Center"/>
   </Grid>
 </Grid>

Для справки, Сетка построена следующим образом:

Refrence image

Установите фоновое треугольное изображение, и я полагаю, этого достаточно.

0 голосов
/ 26 августа 2011

Просто переписать шаблон текстового поля, как это

<ControlTemplate TargetType="Textbox">
    <Path ... define your triangle here>               
</ControlTemplate> 

, а затем установите для свойства ввода в текстовом поле значение true. также выровняйте продолжение Hor. и вер. ALG. таким образом, он находится в центре треугольника. убедитесь, что фон текстового поля прозрачный, чтобы он не переписывал границы треугольника.

также, если вы не хотите выходить за пределы, поместите предъявитель контента в поле просмотра.

вы также можете просмотреть свойство clip.

0 голосов
/ 26 августа 2011

Вам нужно перезаписать шаблон TextBox

Я бы порекомендовал получить копию Blend , извлечь из нее шаблон TextBox и изменить его в соответствии с вашими потребностями.

Если вы не можете получить Blend, я бы порекомендовал Показать мне шаблон , который представляет собой инструмент WPF, показывающий шаблон по умолчанию для большинства элементов управления WPF

...