Рисование текста в/вверху строки в WPF

Мне было интересно, можно ли это сделать в WPF:

Текст в строке, текст поверх строки

Думаю, главная проблема здесь в том, что я не могу встроить текстовый блок в строку в XAML, что я обычно и делаю. Кто-нибудь знает, как я могу решить эту проблему?

EDIT: он также должен обрабатывать диагональный текст.


person Dominic K    schedule 22.08.2010    source источник


Ответы (3)


Вы можете сделать это, это на самом деле довольно легко. Вы должны иметь в виду, что вы можете вкладывать содержимое в тег <TextBlock>....

<TextBlock>
    <Line X1="0" Y1="0" X2="100" Y2="0" Stroke="Black" StrokeThickness="4"/>
    <TextBlock Text="Hello there!" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    <Line X1="0" Y1="0" X2="100" Y2="0" Stroke="Black" StrokeThickness="4"/>
</TextBlock>
person Muad'Dib    schedule 22.08.2010
comment
Спасибо! Это сработало отлично! Я буду работать над тем, чтобы сделать его более динамичным (в IE строка всегда одинаковой длины, даже если текста больше), но это отличная отправная точка! - person Dominic K; 22.08.2010
comment
рад помочь, я бы сделал его пользовательским элементом управления или пользовательским элементом управления или чем-то еще, чтобы вы могли упростить настройку и получить именно тот эффект, который вы хотите - person Muad'Dib; 22.08.2010
comment
Как я мог сделать это из кода? P.S. добавление детей в TextBlock.Content? - person Javidan; 17.05.2012
comment
@Javidan: проверьте это stackoverflow .com/questions/3542705/ - person Cesario; 25.07.2016

Можете ли вы создать сетку из трех столбцов, со строкой в ​​первом и третьем столбцах и текстом во втором? Конечно, вам придется установить свойства левой и правой линии так, чтобы они растягивались по всей ширине.

person Timwi    schedule 22.08.2010
comment
Я отредактировал свой пост, потому что вы только что напомнили мне кое-что - линии тоже должны быть диагональными. Я не думаю, что ваш метод сработает в этом случае, хотя это очень, очень хорошая идея, о которой я даже не думал. - person Dominic K; 22.08.2010

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

<Grid>
    <Grid.ColumnDefinitions>
         <ColumnDefinition Width="1*"/>
         <ColumnDefinition Width="Auto"/>
         <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <Separator Grid.Column="0" Margin="5"/>
    <TextBlock Text="Hello" Grid.Column="1"/>
    <Separator Grid.Column="2" Margin="5"/>
</Grid>
person AQuirky    schedule 29.07.2017