2009-09-14 17 views
7

Tengo un TextBlock en un Grid con su atributo Padding establece en 5. A veces, el último carácter se corta, dependiendo de qué cadena de la propiedad se establece en Text.WPF TextBlock El relleno está cortando el texto

<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> 

Cuando el Text se establece en el 0x0FF no es visible. Cuando se establece en 0xAB, la cadena se muestra bien. Establecer el Padding en 0 también hace que la cadena se muestre bien.

+0

Necesitamos ver todo el XAML para que podamos ver cuál es el problema con la lógica de su diseño. –

+0

He proporcionado un ejemplo completo. –

Respuesta

6

Lo que describes es obviamente un error de diseño en WPF (probablemente en el TextBlock). Si la última letra está envuelta (y cortada) parece depender del ancho real de la cadena y del tamaño de la última letra con respecto al tamaño del relleno.

Sugiero que informe el error here.

Para evitar este problema puede utilizar el siguiente código (sólo hay que poner un borde alrededor que textBlock y establecer el relleno de allí en vez):

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

Gracias, lo informaré como sugirió. –

+0

informado en https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=497453 –

0

Haga la columna de la cuadrícula que contiene el tamaño de bloque de texto automático como esto

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

He intentado su sugerencia pero la F aún está cortada. –

+0

Vaya, probé tu código y obtuve el mismo resultado, corta F. Esto también ocurre con 0x0b y 0x0d pero otros números hexadecimales se muestran correctamente. –

0

Si ajusta la altura de la TextBlock a 100, ¿el F y después se enrolle?

+0

Esta fue una buena suposición, pero no, desafortunadamente intenté con lo que sugirió y la F no estaba envuelta. –

+0

Configuración de TextWrapping = "NoWrap" corrige el problema sin embargo. –

0

Sólo aumentar la altura de la ComboBoxItem, debe resolver el problema.

Cuestiones relacionadas