如何在WPF中将插入符分配给控件

5

需要创建一个新的WPF控件并将光标交给它。 在WINFORMS或之前的Windows UI中,使用WIN API Caret函数很容易,但现在在WPF中,我们没有每个控件的hwnd,那么有没有办法做到呢?

2个回答

3
在WPF中,插入符实际上是CaretElement,一种用于呈现选择块和插入符的内部FrameworkElement。
如果您不从已经提供插入符支持的某些控件继承并尝试操作它,则可悲的是,您可能需要从头开始实现它。
编辑
CaretElement是框架内部的,并且确实没有文档记录。
例如,在此处中提到了它。
在一个商业包中存在一个闭源的自定义实现。

那个 CaretElement 没有文档,甚至无法访问,对吧? - jmayor
为了完整起见,编辑了答案。 - Kenan E. K.
1
我创建了一篇文章,解释如何在WPF中创建一个 http://www.codeproject.com/Articles/633935/Customizing-the-Caret-of-a-WPF-TextBox - d.moncada

1

在WPF中,插入符号只是另一种动画,没有特殊的API。绘制一条线,并使用DoubleAnimation更改其不透明度。

如果您仔细观察WPF TextBox,插入符号甚至不会进行“像素反转”,它只是在字母上绘制的灰色线条。

潜在地,您可以通过实现像素着色器效果在WPF中进行像素反转。但可能不值得。VS2010 beta不会对文本插入符号进行反转。

除了TextBox / RichTextBox之外,您还可以找到3个其他的编辑组件:

  • Expression Blend代码编辑器
  • Visual Studio 2010代码编辑器
  • SharpDevelop 4代码编辑器

好的,这很棘手...然后文本应该由TextInput事件以及Preview/KeyDown/UP事件处理。从头开始制作真是一场噩梦...感谢大家的帮助。 - jmayor
相关:如何在.NET中获取系统插入符号周期? ...虽然在WPF中没有直接检索插入符号闪烁频率的方法,除了使用P / Invoke或引用WinForms(自行决定哪个是较小的邪恶),但WPF的SystemParameters类确实提供了CaretWidth字段。 - O. R. Mapper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接