Заполнение WPF TextBlock отсекает текст

у меня есть TextBlock на Grid С Padding атрибут установлен в 5. Иногда последний символ отрезается, в зависимости от того, какая строка 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 также делает отображение строки просто прекрасным.

4 ответов


то, что вы описываете, очевидно, ошибка макета в WPF (вероятно, в TextBlock). Завернута ли последняя буква (и отрезана), по-видимому, зависит от фактической ширины строки и размера последней буквы относительно размера заполнения.

Я предлагаю вам сообщить об ошибке здесь.

чтобы обойти эту проблему, вы можете использовать следующий код (просто поместите границу вокруг textblock и установите там отступ а):

<Border Padding="5" Grid.Row="0" Grid.Column="1">
    <TextBlock  HorizontalAlignment="Left"
        Text="0x0F" TextWrapping="Wrap"
        VerticalAlignment="Top" />
</Border>

сделайте столбец сетки, содержащий авто размер textblock, как это

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
  </Grid.ColumnDefinitions>
  <TextBlock Grid.COlumn="0" Text="{Binding Path=SomeViewModelProperty}" />
</Grid>

Если вы установите высоту на TextBlock в 100, то F затем обернется?


просто увеличьте высоту ComboBoxItem, это должно решить проблему.