我在WPF4中设置CaretBrushes时发现了一些事情,但是有没有人真的改变了插入符本身?
我想要做的是在INSERT模式下使用OVERWRITE插入符号。我见过一个hack from .Net 3.5 times,但它没有表现,并且缺乏实际的光标移动......
如果Caret有一个模板会很棒 - 这与WPF的整个想法是一致的......
有什么建议吗?
答案 0 :(得分:35)
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 Brush,但是插入符总是显示为一条小垂直线。
答案 1 :(得分:8)
因为框架使用背景颜色的反转来设置插入符的颜色,如果将Background属性设置为{x:Null},那么最终会得到默认的黑色插入符号,它在黑色背景上可能特别难看!
http://www.codeproject.com/Articles/34736/Changing-the-Caret-Colour-in-WPF
此问题的简单解决方案是实际指定Background属性的值。如果您有黑色背景并想要一个白色插入符,您可以将Background属性的值设置为#00000000,这是完全透明的黑色(如果这有意义!)。该框架似乎忽略了颜色的不透明度组件,因此您最终得到了透明背景和白色插入符号!
还有一个链接: http://blogs.msdn.com/b/llobo/archive/2007/02/08/changing-caret-color-in-textbox.aspx