2011-11-15 17 views
32

Cho một khối văn bản định dạng trong 7,1 dự án Windows Phone:TextBlock với nhiều <Run> khoảng cách

<StackPanel Orientation="Horizontal"> 
    <TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8"> 
      <Run Text="total length "/> 
      <Run Text="{Binding TotalHours}" FontSize="48"/> 
      <Run Text="h "/> 
      <Run Text=":" FontSize="48"/> 
      <Run Text="{Binding TotalMinutes}" FontSize="48"/> 
      <Run Text="m "/> 
    </TextBlock> 
</StackPanel> 

Nó đang được xem trước một cách chính xác trong VS thiết kế:

vs text block

Nó đã được tìm kiếm không phải là cách tôi muốn trong Blend:

blend text block

Nó trông giống như trong Blend (nhóm công việc tốt Blend) trong trình giả lập và một thiết bị thực.

Điều gì sẽ thêm những khoảng trắng đó trước và sau 8 và 45 lớn?

Làm cách nào để buộc bố cục của tôi trông giống hệt (như trong thiết kế VS)?

Trả lời

53

nếu bạn viết tất cả Runs trong cùng một dòng, khoảng trống sẽ biến mất. Về cơ bản, một dòng mới ở đây là một khoảng trống trên giao diện người dùng.

<TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8"><Run Text="total length "/><Run Text="{Binding TotalHours}" FontSize="48"/><Run Text="h "/><Run Text=":" FontSize="48"/><Run Text="{Binding TotalMinutes}" FontSize="48"/><Run Text="m "/></TextBlock> 

enter image description here

+3

trả lời tuyệt vời. Giống như nghiêm túc, chúng tôi có những Runs là yếu tố con của TextBlock, tại sao địa ngục lại quan trọng đối với cách TextBlock được hiển thị cho dù chúng ta có đặt khoảng trống giữa chúng hay không. Và tại sao dòng mới + nhiều không gian được hiểu là không gian đơn lẻ ?? –

+3

@ValentinKuzub Vì bạn có thể nhập văn bản thuần túy giữa các lần chạy và nó sẽ được hiển thị. Việc thu gọn các khoảng trống liên tiếp (các tab, vào) thành một không gian duy nhất là hành vi XML phổ biến mà hầu hết chúng ta đã quen thuộc với HTML. –

+2

vâng, như thể đó là một ví dụ tuyệt vời về sự vĩ đại của HTML trên XML? cho phép trộn văn bản giữa Chạy, Chạy và xử lý khoảng trắng với xử lý trường hợp đặc biệt rõ ràng không phải là một điều tốt và một sự lựa chọn kỳ lạ. Vấn đề trao đổi của bạn và nguyên nhân. Vấn đề là điều trị kỳ lạ của các phần tử XML con của TextBlock. Nó bao gồm điều trị khoảng trắng kỳ lạ và văn bản thô lạ ở giữa các yếu tố điều trị. –

9

Xây dựng ra câu trả lời Justin XL, phần quan trọng là bạn không thể có khoảng trắng giữa các thẻ chạy, nhưng khoảng trắng trong các thẻ tự does't vấn đề ...

Vì vậy, bạn có thể sáng tạo để đặt chạy trên dòng riêng biệt, nhưng không thêm không gian để kết quả:

<!-- Formatted to prevent adding spaces between runs --> 
<TextBlock Foreground="DarkGray" VerticalAlignment="Bottom" Margin="0,0,0,8" 
    ><Run Text="total length " 
    /><Run Text="{Binding TotalHours}" FontSize="48" 
    /><Run Text="h " 
    /><Run Text=":" FontSize="48" 
    /><Run Text="{Binding TotalMinutes}" FontSize="48" 
    /><Run Text="m " 
/></TextBlock> 
+0

tại sao không sử dụng Spans thay vì Chạy sau đó? (hoặc là chúng không được hỗ trợ trên Windows Phone?) –

+0

Tôi nghĩ rằng vấn đề ở đây có nhiều hơn để làm với khoảng trắng giữa các thẻ được coi là một không gian chứ không phải là một vấn đề với chính các thẻ. Từ những gì tôi hiểu, Span được sử dụng để thêm các yếu tố không phải văn bản vào một textblock, trong đó Run chỉ dành cho văn bản, vì vậy tôi nghi ngờ sử dụng Span thay cho Run sẽ khắc phục vấn đề với các khoảng trống được thêm vào. –

+0

Đó là nó, cảm ơn! – serop