WPF TextBlock Padding обрезает текст
Вопрос
У меня есть TextBlock
в Grid
с атрибутом Padding
, установленным на 5. Иногда последний символ обрезается, в зависимости от того, что string для свойства Text
установлено значение.
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SomeClass">
<ScrollViewer Padding="5" VerticalScrollBarVisibility="Auto">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label
Grid.Row="0" Grid.Column="0"
Content="SomeLabel"
HorizontalAlignment="Right"
HorizontalContentAlignment="Right"
VerticalAlignment="Center" />
<TextBlock
Grid.Row="0" Grid.Column="1"
HorizontalAlignment="Left"
Padding="5"
Text="0x0F"
TextWrapping="Wrap"
VerticalAlignment="Top" />
</Grid>
</ScrollViewer>
</UserControl>
Когда для Text
установлено значение 0x0F
, F
не отображается. Когда он установлен в 0xAB
, строка отображается нормально. Установка для Padding
значения 0 также делает отображение строки очень хорошим.
Решение
То, что вы описываете, очевидно, является ошибкой компоновки в WPF (возможно, в TextBlock). Завершение (и обрезание) последней буквы зависит от фактической ширины строки и размера последней буквы по отношению к размеру отступа.
Я предлагаю вам сообщить об ошибке .
Чтобы обойти эту проблему, вы можете использовать следующий код (просто поместите рамку вокруг вашего текстового блока и установите вместо него отступ):
<Border Padding="5" Grid.Row="0" Grid.Column="1">
<TextBlock HorizontalAlignment="Left"
Text="0x0F" TextWrapping="Wrap"
VerticalAlignment="Top" />
</Border>
Другие советы
Создайте столбец сетки, который содержит автоматический размер текстового блока, как этот
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.COlumn="0" Text="{Binding Path=SomeViewModelProperty}" />
</Grid>
Если вы установите высоту в TextBlock равной 100, тогда F будет перенесен?
Просто увеличьте высоту ComboBoxItem, это должно решить проблему.