2011-03-09 124 views
1

是否可以使用只讀WPF文本框顯示前3個字符的一種顏色,其餘7個字符的顏色不同。我可以用降價給出的最佳例子是201 103/478如何在WPF文本框中使用不同的顏色

客戶要求這樣做的原因是因爲庫存號碼的格式爲YYYYMM/999。 90%以上客戶以YMM/999格式表示股票編號。請求是YYY字符以淺灰色顯示,剩餘的YMM/999字符以黑色顯示。

當前使用了文本框控件,因爲股票編號必須能夠被複制到剪貼板並允許通過上下文菜單進行排序。如果另一個控件更適合於實現着色,請複製排序要求,那麼該解決方案是可以接受的。

回答

3

@Vlad導致我在正確的方向拿出了以下的答案。

<TextBlock HorizontalAlignment="Right"> 
    <TextBlock.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Sample"/> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
    <Span Foreground="Gray"><Run Text="{controls:Binding Path=StockNumberPrefix}"/></Span><Run Text="{controls:Binding Path=ShortStockNumber}" Margin="0"/> 
</TextBlock> 
+0

您可以用更有效率的「運行」替換內部的'TextBlock'。 (在.NET 4中,['Run.Text'](http://msdn.microsoft.com/zh-cn/library/system.windows.documents.run.text.aspx)是依賴項屬性,因此您可以綁定它的東西。) – Vlad 2011-03-11 06:34:36

+0

@Vlad:我會告訴你,運行效率更高,並相應地更新了代碼。 – 2011-04-10 22:13:36

2

你確定你需要一個TextBox嗎?如果您可以使用TextBlock,則可以將前3個字符放入不同的Span(它可以擁有自己的Foreground筆刷)。儘管如此,你將不可能通過綁定來設置文本。

(您可以restyle TextBlock看起來像一個TextBox,如果這個問題。)

+0

謝謝你,讓我走下正確的道路提供我的答案。 – 2011-03-10 00:24:31

相關問題