2009-09-14 5 views
7

J'ai un TextBlock dans un Grid avec son attribut Padding défini sur 5. Parfois, le dernier caractère est tronqué, selon la chaîne sur laquelle la propriété Text est définie.WPF TextBlock Le remplissage est en train de couper du texte

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

Lorsque le Text est réglé sur 0x0F le F n'est pas visible. Lorsqu'il est défini sur 0xAB, la chaîne s'affiche correctement. Le réglage de Padding à 0 rend également l'affichage de la chaîne très bien.

+0

Nous avons besoin de voir tout le XAML afin que nous puissions voir ce qui ne va pas avec votre logique de mise en page. –

+0

J'ai fourni un exemple complet. –

Répondre

6

Ce que vous décrivez est évidemment un bogue de mise en page dans WPF (probablement dans le TextBlock). Si la dernière lettre est enveloppée (et coupée) semble dépendre de la largeur réelle de la chaîne et de la taille de la dernière lettre par rapport à la taille du rembourrage.

Je vous suggère de signaler le bug here.

Pour contourner ce problème, vous pouvez utiliser le code suivant (il suffit de mettre une bordure autour de vous textBlock et définir le rembourrage il à la place):

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

Merci, je vais le signaler comme vous l'avez suggéré. –

+0

Reporté à l'adresse https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=497453 –

0

Faire la colonne de la grille qui contient la taille auto textblock comme celui-ci

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

J'ai essayé votre suggestion mais le F est toujours coupé. –

+0

Wow, j'ai essayé votre code et obtenir le même résultat, il coupe F. Cela se produit également pour 0x0b et 0x0d mais d'autres nombres hexadécimaux sont affichés correctement. –

0

Si vous réglez la hauteur sur le TextBlock à 100, ne le F puis s'enveloppé?

+0

C'était une bonne supposition, mais non, malheureusement j'ai essayé ce que vous avez suggéré et le F n'a pas été emballé. –

+0

La définition TextWrapping = "NoWrap" corrige cependant le problème. –

0

augmenter Juste la hauteur du ComboBoxItem, il faut résoudre le problème.

Questions connexes