.NET графический ввод текста - PullRequest
0 голосов
/ 25 января 2010

Предположим, я отображаю растровое изображение и хочу разрешить размещение текста на этом растровом изображении. Я могу отобразить элемент управления RichEdit или TextBox в этом месте и разрешить ввод текста с определенным шрифтом / размером и т. Д., Но затем пользователь может «видеть», что прямоугольные элементы управления вводом текста появляются и исчезают при вводе / редактировании и редактирование отменить. Он также охватывает растровое изображение при вводе / редактировании текста. У меня вопрос, как это сделать так, чтобы окно управления вводом текста было «прозрачным» или не «видимым».

Опять же, если на растровом изображении есть текст, пользователь нажимает на текст, и в тексте появляется символ альта, без отображения видимого прямоугольного элемента управления, такого как текстовое поле, richedit и т. Д. текст просто «по волшебству» становится редактируемым.

Есть ли способ сделать эту запись текста "прозрачного фона" в .NET?

Ответы [ 3 ]

0 голосов
/ 25 января 2010

Самый простой способ сделать это - использовать элемент управления TextBox в WPF. Вы можете легко установить прозрачный фон:

<TextBox Text="{Binding MyProperty}" Background="Transparent" />

Чтобы сделать все текстовое поле прозрачным, за исключением его содержимого, просто используйте ControlTemplate:

<TextBox Text="{Binding MyProperty}">
  <TextBox.Template>

    <ControlTemplate>
      <ScrollViewer Name="PART_ContentHost" />
    </ControlTemplate>

  </TextBox.Template>
</TextBox>

Если вы все еще используете WinForms, это намного сложнее. У вас есть три варианта:

  • Похоже, тип приложения, которое вы делаете, уже является отличным кандидатом в WPF, поэтому я бы определенно переключился на WPF, если вы не слишком углубились в это. Помимо прозрачных текстовых полей, WPF имеет много других преимуществ по сравнению с WinForms, которые могут значительно повысить производительность труда вашего разработчика, например, расширенное связывание данных и создание шаблонов.

  • Если вы застряли с WinForms, но можете визуализировать область за TextBox в WPF, используйте WPF ElementHost, чтобы отобразить весь раздел пользовательского интерфейса с помощью WPF, и оставьте остальной код как WinForms.

  • В противном случае написание собственного элемента управления заменой TextBox, вероятно, лучшее, что вы можете сделать.

0 голосов
/ 25 января 2010

Один из способов - создать новый пользовательский элемент управления, унаследовав от TextBox и переопределив метод OnPaint? Я бы использовал .NET Reflector, чтобы увидеть, что происходит в оригинальном методе, и попытаться выяснить, как визуализировать текст без фона / рамки.

0 голосов
/ 25 января 2010

На ум приходит несколько вариантов:

  • Может быть неплохо показать окно ввода текста. Это дает понять пользователю, что, щелкнув по растровому изображению, он вошел в новый «режим» и теперь может вводить текст. Это согласуется с редактированием имен элементов в виде дерева или редактированием имени файла в проводнике Windows, например.

  • TextBox поддерживает BorderStyle.None, но не позволяет прозрачный фон (предположительно, потому что он должен был бы сохранить фон во время операций редактирования). Это легко проверить, работает ли он достаточно хорошо для ваших нужд.

  • Было бы очень легко записать именно то поведение, которое вы хотите, на ваш дисплей - то есть полностью отказаться от сторонних элементов управления. Вам просто нужно визуализировать текст и во время редактирования добавить в отображение каретки (то есть нарисовать простую линию в позиции вставки) и обработать нажатия клавиш, чтобы добавить или удалить текст в позиции каретки. Вам просто нужно отделить визуализацию текста и фона, чтобы вы могли повторно визуализировать его при изменении текста.

...