2011-03-09 123 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

相关问题