Как сделать перенос в textblock

Обновлено: 04.07.2024

Я'м извлечение текста из XML-файла, и я'd, как, чтобы вставить несколько новых строк, которые интерпретируются в TextBlock рендеринга в качестве новых линий.

Что мне нужно поставить в XML для того, чтобы представить новую линию в GUI?

Я'пробовала что-то подобное вручную устанавливать текст в XAML:

И в то время как закодированный символ не'т появляются в GUI он также не'т дать мне новую строку.

Вы можете попробовать положить новую строку данных:

Если это не сработает, вам придется парсить строку вручную.

Если вам нужен прямой XAML, который's легко кстати:

Для полноты картины: вы также можете сделать это:

Вы также можете использовать привязку

И установить MyText такой:

вы должны использовать

Или, если вы предпочитаете :

осторожно : если вы как использовать &10 и перейти на следующую строку в ваш текст, вы'будете иметь две пустые строки.

Хотя это старый вопрос, Я'вэ просто сталкивался с проблемой и решал ее иначе, чем ответы. Может быть, это может быть полезно для других.

Я заметил, что даже если мой XML-файлов выглядела так:

Если все остальное терпит неудачу, вы можете также использовать

Используя Системы.Среды.Строки-это единственное решение, которое работает для меня. Когда я попробовал \р\н он просто повторяют реальный \р\н в текстовом поле.

Вы должны убедиться, что объект TextBlock включена эта опция:

Вставить на "строки" или и"абзац" в элемента richtextbox-то "РТБ-то" такой:

Единственный способ, чтобы получить строку элементов, вставляя текст с " Я\Р№&; предметы сначала, а потом прикладывать больше кода, которая работает на выбор и/или объектов TextRange. Это гарантирует, что \пар элементов преобразуются в \позиций, сохраняются и остаются правильными при повторном открытии *.Файл rtf. Вот что я нашел до сих пор после жестких попыток. Мои три строки кода должны быть окружены больше кода (с петлями), чтобы установить элементы textpointer в (.Начать .Конец .ContentStart .ContentEnd), где линии и перерывы должны идти, что я и сделал с успехом для моих целей.

Есть ли способ иметь \n сделать разрыв строки в TextBlock ?

Или есть лучший способ вызвать разрыв средней линии внутри Text атрибут?

Это не работает для меня, это должно быть значение Text атрибут, потому что текстовая строка устанавливается из внешнего источника.

Я знаком с LineBreak но это не тот ответ, который я ищу.

Для получения дополнительной информации о символах в кодировке HTML ознакомьтесь с w3schools

Самый простой способ

Правильный способ его использования может быть следующим:

LineBreak внутри коллекции

Как насчет разбиения строки на два тега?

Лучший способ, который сработал для меня для нескольких строк в одном текстовом блоке, - это:

Убедитесь, что вы не используете TextWrapping="Wrap". Используйте TextWrapping="NoWrap" или ничего не используйте.

Я опаздываю на вечеринку, но. это более или менее то, как я это сделал (учтите, что мои ItemSources - простые строки, не отформатированные, и мне не нужно ничего конвертировать)

Это также отлично работает:

Просто используйте элемент управления AccessText. Вы можете использовать его как метку, и у вас есть свойство TextWrapping="WrapWithOverflow"

У меня так и работает нормально. Кроме того, у вас нет проблем с динамическим изменением текста.

У меня была похожая проблема, и я хотел привязать строку разметки xaml к TextBlock. По сути, хранение декларативной разметки внутри TextBlock в строке для последующего использования.

Вот как я это сделал: я создал подкласс TextBlock для привязки InlineCollection и написал конвертер между строкой и InlineCollection(или фактически общим списком Inlines.)

Элемент предназначен для вывода текстовой информации, для создания простых надписей:

Ключевым свойством здесь является свойство Text, которое задает текстовое содержимое. Причем в случае

данное свойство задается неявно.

С помощью таких свойств, как FontFamily, TextDecorations и др., мы можем настроить отображение текста. Однако мы можем задать и более сложное форматирование, например:

О негин был, по мненью многих…

TextBlock в WPF

Элементы Run представляют куски обычного текста, для которых можно задать отдельное форматирование.

Для изменения параметров отображаемого текста данный элемент имеет такие свойства, как LineHeight , TextWrapping и TextAlignment .

Свойство LineHeight позволяет указывать высоту строк.

Свойство TextWrapping позволяет переносить текст при установке этого свойства TextWrapping=”Wrap”. По умолчанию это свойство имеет значение NoWrap, поэтому текст не переносится.

Свойство TextAlignment выравнивает текст по центру (значение Center), правому (Right) или левому краю (Left):

Для декорации текста используется свойство TextDecorations , например, если TextDecorations=”Underline”, то текст будет подчеркнут.

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

TextBox

Если TextBlock просто выводит статический текст, то этот элемент представляет поле для ввода текстовой информации.

Он также, как и TextBlock, имеет свойства TextWrapping , TextAlignment и TextDecorations .

С помощью свойства MaxLength можно задать предельное количество вводимых символов.

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)

По умолчанию, если вводимый текст превышает установленные границы поля, то текстовое поле растет, чтобы вместить весь текст. Но визуально это не очень хорошо выглядит. Поэтому, как и в случае с TextBlock, мы можем перенести непомещающийся текст на новую строку, установив свойство TextWrapping=”Wrap”.

Чобы переводить по нажатию на клавишу Enter курсор на следующую строку, нам надо установить свойство AcceptsReturn=”True”.

Также мы можем добавить полю возможность создавать табуляцию с помощью клавиши Tab, установив свойство AcceptsTab=”True”

Для отображения полос прокрутки TextBox поддерживает свойства VerticalScrollBarVisibility и НоrizontalScrollBarVisibility :

Возможно, при создании приложения нам потребуется сделать текстовое поле недоступным для ввода (на время в зависимости от условий или вообще), тогда для этого нам надо установить свойство IsReadOnly=”True”.

Для выделения текста есть свойства SelectionStart , SelectionLength и SelectionText . Например, выделим программно текст по нажатию кнопки:

Обработчик нажатия кнопки:

Проверка орфографии

TextBox обладает встроенной поддержкой орфографии. Чтобы ее задействовать, надо установить свойство SpellCheck.IsEnabled=”True”. Кроме того, по умолчанию проверка орфографии распространяется только на английский язык, поэтому, если приложение заточено под другой язык, нам надо его явным образом указать через свойство Language :

Привет, как дила?

Проверка орфографии в WPF

Метка (Label)

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

Теперь, нажав на клавишу “п”, мы переведем фокус на связанное текстовое поле. При вызове приложения подчеркивание не отображается, чтобы отображать подчеркивание, надо нажать на клавишу Alt. Тогда чтобы перевести фокус на связанное текстовое поле необходимо будет нажать сочетание Alt + “п”. Если не предполагается использование клавиш быстрого доступа, то для вывода обычной текста вместо меток лучше использовать элемент TextBlock.

PasswordBox

Элемент предназначен для ввода парольной информации. По сути это тоже текстовое поле, только для ввода символов используется маска. Свойство PasswordChar устанавливает символ маски, отображаемый при вводе пароля. Если это свойство не задано, то по умолчанию для маски символа используется черная точка. Свойство Password устанавливает парольную строку, отображаемую по умолчанию при загрузке окна приложения.

PasswordBox в WPF

RichTextBox

Для вывода текстового содержимого, насыщенного форматированием, графикой, предназначен RichTextBox. Можно даже сказать, что он выводит не просто текст, а документы с более сложным форматированием, чем обычный TextBox. Более подробно о нем, а также как на его основе создать простой текстовый редактор, мы поговорим в главе, посвященной документам.

Для получения дополнительной информации о символах в кодировке HTML ознакомьтесь с w3schools

Самый простой способ

Как насчет разбиения строки на два тега?

не будет работать, если он находится внутри коллекции, такой как Grid или StackPanel. В таких случаях будет работать следующее:

LineBreak внутри коллекции

Правильный способ его использования может быть следующим:

Это также отлично работает:

Я опаздываю на вечеринку, но… это более или менее то, как я это сделал (учтите, что мои ItemSources – простые строки, не отформатированные, и мне не нужно ничего конвертировать)

Просто используйте элемент управления AccessText. Вы можете использовать его как метку, и у вас есть свойство TextWrapping=”WrapWithOverflow”

У меня так и работает нормально. Кроме того, у вас нет проблем с динамическим изменением текста.

У меня была похожая проблема, и я хотел привязать строку разметки xaml к TextBlock. По сути, хранение декларативной разметки внутри TextBlock в строке для последующего использования.

Вот как я это сделал: я создал подкласс TextBlock для привязки InlineCollection и написал конвертер между строкой и InlineCollection(или фактически общим списком Inlines.)

задание TextBlock.IsHypenationEnabled to true фактически сделает что-то подобное этому, но если вы хотите использовать теги, вы можете использовать такой метод:

/// /// Adds break to a TextBlock according to a specified tag /// ///

The text containing the tags to break up

The TextBlock we are assigning this text to

The tag, eg
to use in adding breaks

TextBlock with bold , italic and underlined text.

textblock_inline_bold.jpg

Это было очень похоже на HTML – Вы просто оборачиваете необходимый контент в тег Bold и получаете жирный текст. Это упрощает процесс создания и отображения специально отформатированного текста в приложении.

Все три рассмотренных тега являются дочерними классами элемента Span, каждый из которых накладывает специальное свойство на элемент Span для получения желаемого эффекта. Например, тег Bold просто устанавливает свойство FontWeight базового элемента Span, а Italic устанавливает FontStyle.

LineBreak

Просто вставляет разрыв строки в тексте. Обратите, пожалуйста, внимание на пример из предыдущей главы, в котором мы использовали элемент LineBreak.

Hyperlink

Элемент Hyperlink позволяет вам вставлять ссылки в текст. Они отображаются согласно текущей теме Windows, которая обычно соответствует подчеркнутому синему тексту, красному при наведении мыши и с курсором в форме руки. Вы можете использовать свойство NavigateUri для определения целевого URL. Вот пример:

This text has a link in it.

textblock_inline_hyperlink.jpg

Гиперссылки часто используются в WPF, когда необходимо осуществлять навигацию между разными страницами. В таком случае, нет необходимости специально обрабатывать событие RequestNavigate, как мы делали в примере, но для соединения со внешними URL c обыкновенного приложения WPF, нам необходимо использовать это событие и класс Process. Мы подписываемся на событие RequestNavigate, которое позволяет запускать контент по URL в браузерах пользователей, но с помощью простого обработчика событий, пример которого представлен ниже:

private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)

Элемент Run позволяет Вам сформатировать сроку, используя доступные свойства элемента Span, но, в то время как Span поддерживает другие встроенные элементы, Run – может содержать лишь простой текст. Это делаем Span более гибким элементом, и, как следствие – логичным выбором при решении большинства задач.

Вы могли заметить, что форматирование текста с помощью XAML – простой процесс, но в некоторых случаях, Вы предпочтёте, либо даже будете вынуждены сделать это из файла CodeBehind. Такая реализация будет более громоздкой, но взгляните на пример, как можно это сделать:

textblock_inline_codebehind.jpg

using System;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Media;namespace WpfTutorialSamples.Basic_controls< public partial class TextBlockCodeBehindSample : Window < public TextBlockCodeBehindSample() < InitializeComponent(); TextBlock tb = new TextBlock(); tb.TextWrapping = TextWrapping.Wrap; tb.Margin = new Thickness(10); tb.Inlines.Add(“An example on “); tb.Inlines.Add(new Run(“the TextBlock control “) < FontWeight = FontWeights.Bold >); tb.Inlines.Add(“using “); tb.Inlines.Add(new Run(“inline “) < FontStyle = FontStyles.Italic >); tb.Inlines.Add(new Run(“text formatting “) < Foreground = Brushes.Blue >); tb.Inlines.Add(“from “); tb.Inlines.Add(new Run(“Code-Behind”) < TextDecorations = TextDecorations.Underline >); tb.Inlines.Add(“.”); this.Content = tb; > >>

Здорово иметь возможность, а в некоторых случаях необходимо использовать этот механизм. Вероятно данный пример заставил Вас еще больше ценить XAML.


Есть Глобальная переменная к Global1
в ней есть текст Код:Рот:Нот:

Как в самой переменной сделать перенос строки?

необходимо получить в той же переменной в таком виде:
Код:
Рот:
Нот:

Спасибо за ответы.


@discovery-84 Вам что нужен массив или вам нужна ИМЕННО строка с переносами? От этого зависит что надо делать


@tts9 Здравствуйте, да именно строка с переносами


Но в басе вы разнице не заметите, он знает что это но ему пофигу, после пробелов нет, а вот если вы напечатать захотите, будет по вашему


@tts9 Спасибо Вам щас попробую..


@discovery-84 D В смысле сохранить это как текст .txt


@discovery-84 Извините а куда это вставлять?
в регулярное выражение? или заменить строку


@discovery-84 В выполнить код, Переменная VAR_TEXT это ваша переменная, можете менять ее как хотите


@discovery-84 Смотрите ваш код отработал но перенос не выполнился..
по итогу я ввожу обработанный текст в ответе телеграмма. и он все равно подряд идет.


@discovery-84 Выходит что когда БАС печатает ответ он переноса на новую строку не видит.. так?


@discovery-84 Почему видит, прекрасно, он вообще видит все то чего вы не видите, это вам документ приходит в форматированном виде, а вообще он так не такой. У всех. Это просто непечатываемые символы, они есть всегда, один это перенос, второй это перенос каретки на начало строки. Но он видит что пробелов после нет, а их он тоже видит. Он видит документ весь от начала и до конца.

ЗЫ Вы хотите вставлять какие то значения в эту строку?



@discovery-84 телеграм тоже видит.
Посмотрите что передается когда руками делаете и поменяйте /r/n на то что используется там


Смотрите пробовал даже без переноса строки а вот так

[[GLOBAL:OTVET]].split(":").join(" ")
и в переменной есть есть кучу текста с : но "пробел" не добавился.. что не так (( уже голову сломал.




Пробовал и так [[NEW_VARIABLE]].split(":").join("TEST")
и так [[NEW_VARIABLE]].split("Мобильний:").join("TEST")
вообще ничего не добавляется..


@discovery-84 а в лог чиво выводится, ? Точно все совпадает? инструкция split() берет только полные совпадения, до символа, ищите пробел или непечатное что


в переменной [[NEW_VARIABLE]]
Мобильний:380984666266 Домашній:380414516206 Робочий:380976537356
ищу : и хочу к примеру добавить пробел или любой символ. вот так
[[NEW_VARIABLE]].split(":").join("TEST")
или так пробовал [[NEW_VARIABLE]].split(":").join("html")

на выходе все равно вот так
Мобильний:380984666266 Домашній:380414516206 Робочий:380976537356


@discovery-84 Блин.. это хорошо, но вот я все спросил, а вот это даж как то не подумал как то и не посмотрел.
это хорошо, а чему равно ваше это выражение? в какую переменную резулт?


@tts9 ну по итогу в туже переменную [[NEW_VARIABLE]] а потом вывожу из нее как напечатать текст


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


Связанные

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.25.41261

Читайте также: