- Text Block. Text Decorations Свойство
- Определение
- Значение свойства
- Примеры
- Комментарии
- Можно ли сделать текстовый блок WPF доступным для выбора?
- Text Block. Text Decorations Свойство
- Определение
- Значение свойства
- Примеры
- Комментарии
- Умный TextBlock
- Решение №1
- Решение №2
- Text Block. Font Weight Свойство
- Определение
- Значение свойства
- Примеры
- Комментарии
Text Block. Text Decorations Свойство
Определение
Получает или задает TextDecorationCollection, содержащего эффекты для применения к тексту TextBlock. Gets or sets a TextDecorationCollection that contains the effects to apply to the text of a TextBlock.
Значение свойства
Коллекция TextDecorationCollection, содержащая оформления текста для применения к данному элементу. A TextDecorationCollection collection that contains text decorations to apply to this element. Значение по умолчанию — null (оформление текста не применяется). The default is null (no text decorations applied).
Примеры
В следующем примере показано, как задать TextDecorations атрибут. The following example shows how to set the TextDecorations attribute.
На следующем рисунке показано, как этот пример отрисовывается. The following figure shows how this example renders.
На следующих рисунках показано, OverLine как Baseline Underline визуализируются, и оформления, соответственно. The following figures show how the OverLine, Baseline, and Underline decorations render, respectively.
В следующем примере показано, как задать TextDecorations свойство программным способом. The following example shows how to set the TextDecorations property programmatically.
Комментарии
TextDecorationОбъект — это визуальное украшение, которое можно добавить в текст. A TextDecoration object is a visual ornamentation you can add to text. Существует четыре типа оформления текста: подчеркивание, базовый, зачеркнутый и перечеркивание. There are four types of text decorations: underline, baseline, strikethrough, and overline. Дополнительные сведения о оформлении текста см. в разделе как создать Оформление текста. For more information about text decorations, see How to: Create a Text Decoration.
По умолчанию это свойство имеет значение null и не имеет TextDecorationCollection связанного с ним. By default, this property is set to null and has no TextDecorationCollection associated with it. Прежде чем добавлять текстовые эффекты, создайте новое TextDecorationCollection и назначьте его этому свойству. Before adding any text effects, create a new TextDecorationCollection and assign it to this property.
Можно ли сделать текстовый блок WPF доступным для выбора?
Как разрешить TextBlock выбор текста?
Я попытался заставить его работать, отображая текст, используя TextBox только для чтения, стилизованный под текстовый блок, но в моем случае это не будет работать, потому что TextBox не имеет встроенных строк. Другими словами, как сделать его выбираемым?
TextBox Вместо этого используйте с этими настройками, чтобы сделать его только для чтения и выглядеть как элемент TextBlock управления.
Все ответы здесь — просто использование TextBox или попытка осуществить выделение текста вручную, что приводит к низкой производительности или нестандартному поведению (мигание каретки TextBox , отсутствие поддержки клавиатуры в ручных реализациях и т. Д.)
После нескольких часов копания и чтения исходного кода WPF , я вместо этого обнаружил способ включения встроенного выделения текста WPF для TextBlock элементов управления (или вообще любых других элементов управления). Большая часть функциональности вокруг выделения текста реализована в System.Windows.Documents.TextEditor системном классе.
Чтобы включить выделение текста для вашего контроля, вам нужно сделать две вещи:
Вызовите TextEditor.RegisterCommandHandlers() один раз, чтобы зарегистрировать обработчики событий класса
Создание экземпляра TextEditor для каждого экземпляра вашего класса и передать основной экземпляр ваших System.Windows.Documents.ITextContainer к нему
Также существует требование, чтобы Focusable свойство вашего элемента управления было установлено на True .
Это оно! Звучит просто, но, к сожалению, TextEditor класс помечен как внутренний. Поэтому мне пришлось написать обертку для отражения:
Я также создал SelectableTextBlock производную от того, TextBlock что предпринимает шаги, отмеченные выше:
Другой вариант — создать прикрепленное свойство, TextBlock чтобы включить выбор текста по требованию. В этом случае, чтобы снова отключить выделение, нужно отсоединить a TextEditor , используя эквивалент отражения этого кода:
Text Block. Text Decorations Свойство
Определение
Получает или задает TextDecorationCollection, содержащего эффекты для применения к тексту TextBlock. Gets or sets a TextDecorationCollection that contains the effects to apply to the text of a TextBlock.
Значение свойства
Коллекция TextDecorationCollection, содержащая оформления текста для применения к данному элементу. A TextDecorationCollection collection that contains text decorations to apply to this element. Значение по умолчанию — null (оформление текста не применяется). The default is null (no text decorations applied).
Примеры
В следующем примере показано, как задать TextDecorations атрибут. The following example shows how to set the TextDecorations attribute.
На следующем рисунке показано, как этот пример отрисовывается. The following figure shows how this example renders.
На следующих рисунках показано, OverLine как Baseline Underline визуализируются, и оформления, соответственно. The following figures show how the OverLine, Baseline, and Underline decorations render, respectively.
В следующем примере показано, как задать TextDecorations свойство программным способом. The following example shows how to set the TextDecorations property programmatically.
Комментарии
TextDecorationОбъект — это визуальное украшение, которое можно добавить в текст. A TextDecoration object is a visual ornamentation you can add to text. Существует четыре типа оформления текста: подчеркивание, базовый, зачеркнутый и перечеркивание. There are four types of text decorations: underline, baseline, strikethrough, and overline. Дополнительные сведения о оформлении текста см. в разделе как создать Оформление текста. For more information about text decorations, see How to: Create a Text Decoration.
По умолчанию это свойство имеет значение null и не имеет TextDecorationCollection связанного с ним. By default, this property is set to null and has no TextDecorationCollection associated with it. Прежде чем добавлять текстовые эффекты, создайте новое TextDecorationCollection и назначьте его этому свойству. Before adding any text effects, create a new TextDecorationCollection and assign it to this property.
Умный TextBlock
Недавно появилась необходимость отображения текста в определенной ограниченной области с переменным размером шрифта: таким образом, чтобы текст полностью заполнял отведенную ему область.
Решение №1
Такой способ полностью подходит для небольших строковых переменных, но, к сожалению, в этом случае не работает стандартная функциональность переноса строк — TextWrapping, и строка любой длины будет помещена в одну линию текста.
Решение №2
Так как для меня была важна возможность автоматического размещения текста в несколько строк, я продолжил поиски и остановился на классе FormattedText. У экземпляра этого класса имеется 2 интересующих меня свойства: MaxTextWidth, MaxTextHeight. Присваивая значения этим свойствам, мы ограничиваем область последующей отрисовки текста.
Таким образом, решением проблемы стало реализация класса TextBlockFilled, который наследуется от Control и на этапе отображения итеративно подбирает размер шрифта.
public class TextBlockFilled : Control
<
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(«Text»,
typeof(string),
typeof(TextBlockFilled));
protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
<
base.OnRender(drawingContext);
FormattedText formattedText = formattedText = new FormattedText(
Text,
CultureInfo.GetCultureInfo(«en-us»),
FlowDirection.LeftToRight,
new Typeface(«Verdana»),
ActualHeight,
Brushes.Black);
formattedText.TextAlignment = TextAlignment.Center;
formattedText.MaxTextWidth = ActualWidth — Padding.Left — Padding.Right;
formattedText.Trimming = TextTrimming.None;
double step = ActualHeight / 20;
for (double i = ActualHeight — step; i >= step; i -= step)
<
if (formattedText.Height
Шаг для итерации лучше подбирать в зависимости от высоты отведенного пространства. Для меня шаг в ActualHeight / 20 оказался наиболее подходящим.
Для более широкой области применения класса имеет смысл сделать доступными из вне некоторые свойства оформления (такие как шрифт, цвет…).
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Text Block. Font Weight Свойство
Определение
Получает или задает насыщенность шрифта верхнего уровня для TextBlock. Gets or sets the top-level font weight for the TextBlock.
Значение свойства
Член класса FontWeights, который указывает нужную насыщенность шрифта. A member of the FontWeights class specifying the desired font weight. Значение по умолчанию определяется значением MessageFontWeight. The default is determined by the MessageFontWeight value.
Примеры
В следующем примере показано, как задать FontWeight атрибут TextBlock элемента. The following example shows how to set the FontWeight attribute of a TextBlock element.
В следующем примере показано, как задать FontWeight свойство программным способом. The following example shows how to set the FontWeight property programmatically.
Комментарии
Все FontWeight параметры дочерних элементов переопределяют этот параметр верхнего уровня. Any FontWeight settings on child elements override this top-level setting.
Список допустимых значений весов шрифтов см. в разделе FontWeights класс. For a list of valid values of font weights, see the FontWeights class.
Это свойство зависимостей также имеет присоединенные свойства. This dependency property also has an attached property usage. В XAML используется , где Object — это объектный элемент (обычно элемент Flow), содержащийся в TextBlock , а значение — одно из значений строкового формата свойства FontWeights класса. In XAML, the usage is , where object is an object element (typically a flow element) contained within a TextBlock, and value is one of the string-format values of a property of the FontWeights class. В коде использование присоединенного свойства поддерживается GetFontWeight и SetFontWeight . In code, the attached property usage is supported by GetFontWeight and SetFontWeight. Использование присоединенного свойства не является распространенным, так как большинство элементов, которые могут содержаться в, TextBlock поддерживают аналогичное неприсоединенное FontWeight свойство, которое TextBlock используется для отрисовки. The attached property usage is not common, because most elements that can be contained in a TextBlock support an analogous nonattached FontWeight property, which the TextBlock uses for rendering.