Как я могу передать карету контролю в WPF? - PullRequest
5 голосов
/ 20 июля 2009

Нужно сделать новый элемент управления WPF и дать ему каретку. В WINFORMS или предыдущих версиях Windows UI было легко использовать функции WIN API Caret, но теперь в WPF у нас нет hwnd для каждого элемента управления, так что ... есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 20 июля 2009

В WPF каретка фактически представляет собой CaretElement, внутренний FrameworkElement, используемый для визуализации блоков выделения и каретки.

Если вы не наследуете какой-то элемент управления, который уже предлагает поддержку каретки, и пытаетесь им манипулировать, к сожалению, вы можете столкнуться с необходимостью реализовать его с нуля.

EDIT

Элемент CaretElement является внутренним для структуры и, да, не документирован.

Упоминается, например, .

Пользовательская реализация с закрытым исходным кодом существует в коммерческом пакете.

1 голос
/ 20 июля 2009

Каретка в WPF - это просто еще одна анимация, для этого не нужно специального API. Нарисуйте линию и измените ее непрозрачность с помощью DoubleAnimation.

Если вы внимательно посмотрите на WPF TextBox, каретка даже не выполняет «инверсию пикселей», это просто серая линия, нарисованная над буквой.

Потенциально вы можете сделать инверсию пикселей в WPF, реализовав эффект пиксельного шейдера. Не стоит, наверное. Бета-версия VS2010 не выполняет инверсию для текстовой вставки.

Помимо TextBox / RichTextBox есть еще 3 компонента редактирования, которые вы можете найти:

  • Редактор кода Expression Blend
  • Редактор кода Visual Studio 2010
  • Редактор кода SharpDevelop 4
...