Выделение текста в программе WPF с использованием C#
Обычно для отображения текста в WPF вы используете какой-то объект, такой как Label или TextBlock, но при необходимости вы можете нарисовать текст самостоятельно. Чтобы сделать это проще, во время разработки я устанавливаю свойство Background окна Transparent (иначе окно рисует фон поверх любого текста, который вы рисуете). Я также назвал основной элемент управления grdMain, чтобы было легко определить, насколько велика клиентская область окна.
Чтобы нарисовать текст, переопределите метод OnRender окна и используйте его параметр drawingContext, чтобы сделать рисунок. Эта программа использует следующий метод OnRender.
protected override void OnRender(DrawingContext drawingContext)
{
// Очистите фон и нарисуем эллипс.
DrawEllipse(drawingContext);
// Создаем объект FormattedText.
Typeface typeface = new Typeface("Times New Roman");
double em_size = 40;
FormattedText formatted_text = new FormattedText(
"FormattedText", CultureInfo.CurrentUICulture,
FlowDirection.LeftToRight,
typeface, em_size, Brushes.Red);
// Центрировать текст по горизонтали.
formatted_text.TextAlignment = TextAlignment.Center;
// Найдите центр клиентской области.
double xmid = grdMain.ActualWidth / 2;
double ymid = grdMain.ActualHeight / 2;
Point center =
new Point(xmid, ymid - formatted_text.Height / 2);
// Рисуем текст.
drawingContext.DrawText(formatted_text, center);
// Нарисуем эллипс в точке рисования текста.
drawingContext.DrawEllipse(Brushes.Green, null, center, 3, 3);
}
Этот метод начинается с вызова метода DrawEllipse для рисования эллипса, который заполняет окно. См. Пример для получения информации о том, как работает этот метод.
Далее код создает объект Typeface для представления используемого шрифта, в этом случае Times New Roman. Затем он использует Typeface для создания объекта FormattedText. Этот объект представляет собой конкретный фрагмент текста, нарисованный специальной кистью. Конструктор FormattedText принимает в качестве параметра культуру, которая должна использоваться для рисования текста. Этот пример просто использует текущую культуру пользовательского интерфейса программы.
В дополнение к указанию используемой кисти объект FormattedText предоставляет свойства и методы, позволяющие вам управлять форматированием текста другими способами. Этот пример устанавливает свойство объекта TextAlignment объекта, чтобы центрировать текст по горизонтали.
В отличие от класса StringFormat в GDI +, свойство TextAlignment не дает вам никакого контроля над вертикальным выравниванием текста. Чтобы выровнять текст по вертикали, вам нужно измерить текст и вычислить правильную координату Y.
В этом примере используется размер элемента управления grdMain, чтобы найти центр клиентской области окна. Затем он вычитает половину высоты форматированного текста из координаты Y, чтобы центрировать текст по вертикали.
