2012-03-09 34 views
13

Đây là một câu hỏi tương đối đơn giản:TextTrimming với Ellipsis và Colon

tôi có thể cắt một văn bản với lược sử dụng này:

<TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/> 

nó sẽ cho tôi một cái gì đó dọc theo dòng:

"Câu này quá dài"

=>

"Câu này ... "

Đó là tất cả tuyệt vời và dandy, nhưng những gì tôi thực sự muốn là thế này:

'Câu này ...:'/'Câu này ...:'

Những gì tôi đang tìm kiếm là dấu hai chấm sau dấu ba chấm. Có cách nào đơn giản để đạt được điều này?

EDIT:

xin lỗi vì sự nhầm lẫn.

Tôi muốn thay đổi chuỗi dấu ba chấm mặc định từ '...' thành '...:'. Đồng thời, tôi sẽ bao gồm dấu hai chấm trong chuỗi văn bản. Bằng cách này, tôi sẽ luôn luôn có dấu hai chấm hiển thị. Đồng thời, mọi thứ nên ở trên một dòng trong mọi tình huống.

đây là một vài kết quả có thể chấp nhận:

ngắn đủ:

cách quá l ...:

+0

Bạn đang bối rối [TextWrapping] (http://msdn.microsoft.com/en-us/ library/system.windows.controls.textblock.textwrapping.aspx) và [TextTrimming] (http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.texttrimming.aspx). – Clemens

+0

lol yes. tôi đã sao chép sai dòng xaml -_- – FZdev

+0

kiểm tra "[Làm cách nào để xác định xem văn bản TextBlock của tôi có bị cắt không?] (http://stackoverflow.com/questions/1041820/how-can-i-determine-if -my-textblock-text-được-cắt-tỉa) ". Từ đó nó sẽ có thể làm cho nó được thực hiện. – hennson

Trả lời

19

này hoạt động, nhưng tôi cần phải thêm một số đệm sao cho ruột luôn luôn vẫn có thể nhìn thấy:

<TextBlock Padding="0,0,5,0" > 
    <TextBlock TextTrimming="CharacterEllipsis">Lorem ipsum dolor sit amet, consectetur adipisicing </TextBlock> 
    <TextBlock>:</TextBlock> 
</TextBlock> 
+0

ugh, điều này hoạt động tuyệt vời ngoại trừ tại một số điểm nhất định, có vẻ như dấu văn bản đại tràng bị ẩn bởi textblock văn bản. bất kể đó là tình huống làm việc đơn giản nhất. – FZdev

+0

vâng, tôi nghĩ rằng việc thêm padding đã được sắp xếp. Tôi hy vọng bạn có thể làm cho nó hoạt động, có lẽ đệm trên TextBlock thứ hai. – Phil

+0

đệm của wrapper chắc chắn sẽ giúp (tôi thực sự đã có tại chỗ với tất cả các container khác). thêm đệm vào phía bên trái của đại tràng TB thực sự làm cho nó WORSE hơn thực hiện của bạn. Có thể bằng cách tinkering với các giá trị và bên/s padding được áp dụng để có thể sửa chữa tất cả mọi thứ; nỗ lực của nó không đáng kể ngay bây giờ mặc dù ví dụ của bạn là đủ tốt cho mục đích demo. – FZdev

2

Sử dụng hai TextBlocks với ví dụ elip trong lần đầu tiên và ruột kết trong thư hai.

Cập nhật:

Dường như đây là một câu hỏi tương đối đơn giản với nhiều biến chứng. Một số có thể bị cám dỗ để có một số TextBlocks, chữ đầu tiên có văn bản đích và hai chữ khác hiển thị ":" và "...:" và chuyển đổi giữa với trình chuyển đổi giá trị Hiển thị dựa trên việc TextBlock đầu tiên có đủ hay không. không gian để hiển thị tất cả văn bản của nó. Điều này có khả năng nhưng có tiềm năng cho bố trí không ổn định.

Vừa thực hiện một bảng điều khiển tùy chỉnh tôi có thể tưởng tượng một giải pháp khả thi liên quan đến một thiết kế để giữ ba đứa con mà sẽ được ba TextBlocks mô tả abovel

Một bảng điều khiển tùy chỉnh được thừa hưởng từ Panel nên ghi đè hai phương pháp chính: Đo lường và Sắp xếp .

Trong phương pháp đo, tất cả trẻ em cần được đo.

Trong phương pháp sắp xếp, kiểm tra xem có đủ chỗ để hiển thị hai trẻ đầu tiên và nếu có đặt chúng cạnh nhau. Nếu không có đủ màn hình phòng, đứa trẻ đầu tiên có kích thước để cho phép phòng con thứ ba hiển thị và đặt con thứ ba bên phải.

Cập nhật:

Tôi đã thử các bảng điều khiển tùy chỉnh và nó làm việc ngoại trừ TextBox đầu tiên là clip nhân vật một phần.

Giải pháp tối ưu để định dạng sạch sẽ là phương pháp điều chỉnh chuỗi hiển thị cho đến khi vừa với không gian được phân bổ với hậu tố thích hợp được áp dụng.

+0

Và luôn luôn hiển thị dấu hai chấm, ngay cả khi không có dấu ba chấm? – Clemens

+0

Clemens - xin lỗi vì sự nhầm lẫn, nhưng tôi muốn đại tràng luôn hiển thị Doug - Đó thường là hiệu ứng tôi muốn. Tôi đã thử nó ra và ở độ rộng nhất định, ruột kết giảm xuống dòng tiếp theo. đó chưa đủ tốt. Hai textblocks nằm trong một wrappanel nằm ngang bên trong một dockpanel bên trong một listboxitem. đó cũng là một điều khiển hình ảnh gắn vào bên trái của wrappanel. – FZdev

+0

@FZdev thì tại sao bạn không đặt hai TextBlocks trong một DockPanel ngang, với đầu tiên là TextBlock đầu tiên và thứ hai là TextBlock đã cắt và các giá trị thích hợp cho 'DockPanel.Dock' trên cả hai. Do đó, theo mặc định, TextBlock đã cắt đầy tất cả khoảng trắng không được dấu hai chấm tiêu thụ. Hoặc thậm chí tốt hơn, sử dụng Grid. – Clemens

Các vấn đề liên quan