2012-03-09 26 views
13

這是一個相對簡單的問題:的TextTrimming用省略號和一個冒號

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

它會給我沿着線的東西:

我可以用這個修剪用省略號文本

「這句話是太長」

=>

「這句話我... 「

這是所有偉大的花花公子,但我真正想要的是這樣的:

‘這句話...’/‘這句話......’

我正在尋找是橢圓之後的冒號。有沒有簡單的方法來實現這一點?

編輯:

抱歉的混淆。

我想將默認的省略號字符串從'...'更改爲'...:'。另外,我將在文本字符串本身中包含一個冒號。這樣,我會一直顯示冒號。同樣,在任何情況下,一切都應該在一條線上。

這裏有一對夫婦的結果是可以接受的:

足夠短:

方式太升...:

+0

你混淆[TextWrapping](http://msdn.microsoft.com/en-us/ library/system.windows.controls.textblock.textwrapping.aspx)和[TextTrimming](http://msdn.microsoft.com/zh-cn/library/system.windows.controls.textblock.texttrimming.aspx)。 – Clemens 2012-03-09 07:58:40

+0

哈哈是的。我複製了錯誤的行xaml -_- – FZdev 2012-03-09 09:29:29

+0

請查看「[如何確定我的TextBlock文本是否正在修剪?](http://stackoverflow.com/questions/1041820/how-can-i-determine-if -My-文本塊,文本是幸福微調)」。從那裏應該有可能完成。 – hennson 2012-03-09 10:06:40

回答

19

這工作,但我需要添加一些填充,使結腸始終保持可見:

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

呃,這很好,除了在某些點上,它似乎像冒號文本塊被文本文本塊隱藏。無論如何,這是最簡單的工作情況。 – FZdev 2012-03-10 01:15:36

+0

是的,我想添加填充整理出來。我希望你可以使它工作,也許填充第二個TextBlock。 – Phil 2012-03-10 07:54:38

+0

包裝的填充確實有幫助(我實際上已與所有其他容器)。添加填充到結腸TB的左側實際上使它比你的實現更糟糕。也許可以通過修改數值以及填充適用於哪一方來解決所有問題。儘管現在你的例子已經足夠用於演示的目的,但它現在還不值得你付出努力。 – FZdev 2012-03-10 09:15:05

2

使用兩分的TextBlocks在第一和結腸橢圓例子第二。

更新:

看起來這是一個相對簡單的問題,有很多併發症。

一個人可能會想要有一些TextBlocks,第一個帶有目標文本,另外兩個顯示「:」和「...:」,並根據第一個TextBlock是否有足夠的可見性值空間來顯示它的所有文字。這有可能性,但有可能導致佈局不穩定。

剛走實現了自定義面板,我可以想像,涉及一個設計容納這將abovel

從面板繼承應覆蓋兩個關鍵方法的自定義面板,說明三米的TextBlocks三個孩子一個可能的解決方案:措施和安排。

在測量方法中應該測量所有的孩子。

在排列方法中檢查是否有足夠的空間來顯示前兩個孩子,如果是這樣並排放置。如果沒有足夠的空間顯示,第一個孩子的大小允許第三個孩子房間顯示並將第三個孩子右對齊。

更新:

我嘗試了自定義面板和它的工作,除了第一個TextBox是剪輯部分字符。

乾淨格式化的最終解決方案是一種調整顯示字符串的方法,直到適合分配的空間並使用適當的後綴。

+0

並且總是顯示冒號,即使沒有省略號? – Clemens 2012-03-09 09:32:03

+0

克萊門斯 - 抱歉的混亂,但我希望冒號總是顯示 道格 - 這通常是我想要的效果。我試過了,在一定的寬度下,冒號掉到下一行。這還不夠好。這兩個文本塊位於listboxitem內的dockpanel內的水平wrappanel中。還有一個圖像控件停靠在包裝紙的左側。 – FZdev 2012-03-09 10:55:48

+0

@FZdev那麼你爲什麼不簡單地把兩個TextBlocks放在一個水平的DockPanel中,首先冒號TextBlock是第一個和第二個修剪的TextBlock,並且兩個都是'DockPanel.Dock'的合適值。因此,默認情況下,修剪的TextBlock填充冒號未消耗的所有空間。或者甚至更好,使用網格。 – Clemens 2012-03-09 11:22:49