2009-09-14 14 views
7

Tôi có một TextBlock trong một Grid với thuộc tính Padding được đặt thành 5. Đôi khi ký tự cuối cùng bị cắt, tùy thuộc vào chuỗi thuộc tính Text được đặt thành.WPF TextBlock Padding cắt văn bản

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

Khi Text được thiết lập để 0x0F các F là không nhìn thấy được. Khi được đặt thành 0xAB, chuỗi sẽ hiển thị tốt. Việc đặt Padding thành 0 cũng làm cho chuỗi hiển thị tốt.

+0

Chúng tôi cần xem tất cả XAML để chúng tôi có thể thấy có gì sai với logic bố cục của bạn. –

+0

Tôi đã cung cấp một ví dụ hoàn chỉnh. –

Trả lời

6

Những gì bạn mô tả rõ ràng là lỗi bố cục trong WPF (có thể là trong TextBlock). Có hay không lá thư cuối cùng được bọc (và cắt) dường như phụ thuộc vào chiều rộng thực tế của chuỗi và kích thước của chữ cái cuối cùng liên quan đến kích thước của phần đệm.

Tôi đề nghị bạn báo cáo lỗi here.

Để làm việc xung quanh vấn đề này, bạn có thể sử dụng đoạn mã sau (chỉ cần đặt một biên giới xung quanh bạn TextBlock và thiết lập padding có thay):

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

Cảm ơn bạn, tôi sẽ báo cáo như bạn đã đề xuất. –

+0

Được báo cáo tại https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=497453 –

0

Hãy cột của lưới điện có chứa kích thước TextBlock tự động như thế này

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

Tôi đã thử đề xuất của bạn nhưng F vẫn bị cắt. –

+0

Wow, tôi đã thử mã của bạn và nhận được kết quả tương tự, nó cắt giảm F. Điều này cũng xảy ra cho 0x0b và 0x0d nhưng các số hex khác được hiển thị chính xác. –

0

Nếu bạn thiết lập chiều cao trên TextBlock đến 100, không F sau đó được bọc?

+0

Đây là một dự đoán tốt, nhưng không, tiếc là tôi đã thử những gì bạn đề nghị và F không được bọc. –

+0

Cài đặt TextWrapping = "NoWrap" sẽ khắc phục sự cố. –

0

Chỉ cần tăng Chiều cao của ComboBoxItem, cần giải quyết vấn đề.