Выделение текста в программе 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, чтобы центрировать текст по вертикали.