2012-02-15 89 views
14

我发现了在WPF4中设置CaretBrushes的一些事情,但有没有人曾经改变过插入符号本身?TextBox插入样式

我想要做的是在插入模式下使用OVERWRITE插入符号。我见过一个hack from .Net 3.5 times,但它是unperformant,缺乏实际的背后光标移动...

这将是巨大的,如果插入符有一个模板 - 这将是与整个WPF观点一致......

有什么建议吗?

+0

见http://www.codeproject.com/Articles/633935/Customizing-the-Caret-of-a-WPF-TextBox – 2015-06-09 17:28:27

回答

27

CaretElement是一个内部密封类,例如不能通过数据模板进行自定义。至少,脱字符笔可以改变。

<TextBox Text="This is some random text" CaretBrush="Blue" /> 

如果你想在插入笔刷上有一个线性渐变,可以这样做。

<TextBox Text="This is some random text" FontSize="20"> 
     <TextBox.CaretBrush> 
      <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> 
       <LinearGradientBrush.GradientStops> 
        <GradientStop Color="Blue" Offset="0" /> 
        <GradientStop Color="Red" Offset="1" /> 
       </LinearGradientBrush.GradientStops> 
      </LinearGradientBrush> 
     </TextBox.CaretBrush> 

我试图使用Visual刷还可以,但插入符号总是被示出为小的垂直线。

7

因为框架使用背景颜色的反色来设置插入符的颜色,所以如果将Background属性设置为{x:Null},那么最终将使用默认的黑色插入符号黑色背景可能特别难以看到!

http://www.codeproject.com/Articles/34736/Changing-the-Caret-Colour-in-WPF

简单的解决这个问题是实际指定背景属性的值。如果你有一个黑色的背景,并且需要一个白色符号,你可以将背景属性的值设置为#00000000,这是完全透明的黑色(如果有意义!)。该框架似乎忽略了颜色的不透明组成部分,因此您最终得到的是透明背景和白色插页!

还有一个链接: http://blogs.msdn.com/b/llobo/archive/2007/02/08/changing-caret-color-in-textbox.aspx

+1

工作瓦特/框架3.0 – stackuser83 2015-06-13 17:24:03