Перейти к содержимому

Как поменять цвет текста в wpf

  • автор:

Практическое руководство. Изменение цвета элемента с помощью событий фокуса

В этом примере показано, как изменить цвет элемента при установке и потере фокуса с помощью событий GotFocus и LostFocus.

Этот пример состоит из файла XAML и файла кода программной части.

Пример

Следующий код XAML создает пользовательский интерфейс, состоящий из двух объектов Button, и присоединяет обработчики событий для событий GotFocus и LostFocus к объектам Button.

       

Следующий код программной части создает обработчики событий GotFocus и LostFocus. При установке фокуса клавиатуры на элемент Button, цвет Background элемента Button изменяется на красный. При потере фокуса клавиатуры элементом Button, цвет Background элемента Button изменяется обратно на белый.

public partial class Window1 : Window < public Window1() < InitializeComponent(); >// Raised when Button gains focus. // Changes the color of the Button to Red. private void OnGotFocusHandler(object sender, RoutedEventArgs e) < Button tb = e.Source as Button; tb.Background = Brushes.Red; >// Raised when Button losses focus. // Changes the color of the Button back to white. private void OnLostFocusHandler(object sender, RoutedEventArgs e) < Button tb = e.Source as Button; tb.Background = Brushes.White; >> 
Partial Public Class Window1 Inherits Window Public Sub New() InitializeComponent() End Sub 'raised when Button gains focus. Changes the color of the Button to red. Private Sub OnGotFocusHandler(ByVal sender As Object, ByVal e As RoutedEventArgs) Dim tb As Button = CType(e.Source, Button) tb.Background = Brushes.Red End Sub 'raised when Button loses focus. Changes the color back to white. Private Sub OnLostFocusHandler(ByVal sender As Object, ByVal e As RoutedEventArgs) Dim tb As Button = CType(e.Source, Button) tb.Background = Brushes.White End Sub End Class 

См. также

Совместная работа с нами на GitHub

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

Как изменить цвет текста в Label (TextBlock)?

LabelName.Foreground = Brushes.Black; Что тут не ясного? Просто в коде C# вставляем — и текст в лейбл меняет свой цвет. Сам искал этот вопрос — все почему то отсылают в разметку.

18 окт 2016 в 10:37

  • wpf
  • xaml
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

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

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как поменять цвет текста в wpf

За установку цвета фона и текста элементов отвечают свойства BackgroundColor и TextColor соответственно. В качестве значение они принимают объект класса Microsoft.Maui.Graphics.Color :

namespace HelloApp < class StartPage : ContentPage < public StartPage() < Label header = new Label() < Text = "Hello METANIT.COM" >; header.HorizontalTextAlignment = TextAlignment.Center; header.VerticalTextAlignment = TextAlignment.Center; header.BackgroundColor = Colors.LightBlue; // фоновый цвет header.TextColor = Colors.DarkBlue; // цвет текста Content = header; > > >

В данном случае для определения цвета применялись встроенные готовые цвета из статического класса Colors.

Установка цвета в .NET MAUI и C#

Кроме встроенных готовых цветов типа Colors.DarkBlue (так называемых именнованных цветов) также для установки цвета мы можем указать и другие значения, можно использовать один из конструкторов класса Color. Некоторые из них:

  • new Color(float grayShade) : устанавливает тон серого цвета
  • new Color(float r, float g, float b) : устанавливает компоненты красного, зеленого и синего. Каждая компонента должна иметь значения в диапазоне от 0.0 до 1.0
  • new Color(byte r, byte g, byte b) : устанавливает компоненты красного, зеленого и синего. Каждая компонента должна иметь значения в диапазоне от 0 до 255
  • new Color(float r, float g, float b, float a) : добавляет еще один параметр — a , который передает прозрачность и имеет значение от 0.0 (полностью прозрачный) до 1.0 (не прозрачный)
  • new Color(byte r, byte g, byte b, byte a) : устанавливает компоненты красного, зеленого, синего и прозрачности
Label header = new Label() < Text = "Hello METANIT.COM" >; header.BackgroundColor = new Color(178, 223, 219); header.TextColor = new Color(0, 77, 64);

BackgtoundColor и TextColor в .NET MAUI и C#

Также для установки цвета мы можем использовать ряд статических методов:

  • Color.FromArgb(string hex) : возвращает объект Color, созданный по переданному в качестве параметра шестнадцатеричному значению. В качестве значения в метод передается строка в формате «#AARRGGBB», «#RRGGBB», «#ARGB» или «RGB», где A — показатель прозрачности, R — значение для красного цвета, G — значение для зеленого компонента и B — представляет синий цвет
  • Color.FromRgb(double r, double g, double b) : возвращает объект Color, для которого также устанавливаются компоненты красного, зеленого и синего
  • Color.FromRgb(int r, int g, int b) : аналогичен предыдущей версии метода, только теперь компоненты красного, зеленого и синего имеют целочисленные значения от 0 до 255
  • Color.FromRgba(double r, double g, double b, double a) : добавляет параметр прозрачности со значением от 0.0 (полностью прозрачный) до 1.0 (не прозрачный)
  • Color.FromRgba(int r, int g, int b, int a) : добавляет параметр прозрачности со значением от 0 (полностью прозрачный) до 255 (не прозрачный)
  • Color.FromHsla(double h, double s, double l, double a) : устанавливает последовательно параметры h (hue — тон цвета), s (saturation — насыщенность), l (luminosity — яркость) и прозрачность.
Label header = new Label() < Text = "Hello METANIT.COM" >; header.BackgroundColor = Color.FromArgb("#B2DFDB"); header.TextColor = Color.FromArgb("#aa004D40");

В xaml мы можем задавать цвет с помощью шестнадцатеричных значений также, как в HTML/CSS:

Управление цветом

Стоит отметить, что у класса Color определено ряд дополнительных методов, которые позволяют управлять цветом. В частности, ряд методов позволяются выполнять преобразования

  • ToHex : возвращает шестнадцатеричное значение текущего цвета в виде строки.
  • ToArgbHex : возвращает шестнадцатеричное значение текущего цвета в виде строки в формате ARGB
  • ToRgbaHex : возвращает шестнадцатеричное значение текущего цвета в виде строки в формате RGBA
  • ToInt : возвращает числовое ARGB-представление текущего цвета в виде значения int
  • ToUint : возвращает числовое ARGB-представление текущего цвета в виде значения uint
  • ToRgb : преобразует текущей цвет в отдельные компоненты RGB типа byte
  • ToRgba : преобразует текущей цвет в отдельные компоненты RGBA типа byte
  • ToHsl : преобразует текущей цвет в отдельные компоненты HSL типа float

Кроме того, у класса Color есть ряд дополнительных методов для управления отдельными аспектами цвета

  • AddLuminosity : добавляет цвету яркость
  • MultiplyAlpha : умножает альфа-компоненту (прозрачность) цвета на переданное значение типа float
  • WithAlpha : заменяет альфа-компоненту цвета
  • WithHue : заменяет тон цвета
  • WithLuminosity : заменяет яркость цвета
  • WithSaturation : заменяет насыщенность цвета

Применение некоторых методов:

Label header = new Label() < Text = "Hello METANIT.COM" >; Color customColor = Colors.Teal; customColor = customColor.WithAlpha(0.5f); customColor = customColor.WithHue(0.5f); customColor = customColor.WithLuminosity(0.9f); header.BackgroundColor = customColor;

Элемент TextBlock — встроенное форматирование

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

К счастью, элемент TextBlock поддерживает встроенное содержание. Все эти небольшие нотации похожие на определение элементов управления наследуют класс Inline, что значит, что они могут отображаться как часть текста, встроенного в больший текста. Согласно написанному, эти нотации включают в себя следующие стили текста: AnchoredBlock, Bold, Hyperlink, InlineUIContainer, Italic, LineBreak, Run, Span, и Underline. В следующем примере мы рассмотрим некоторые из них.

Bold, Italic и Underline

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

   TextBlock with bold, italic and underlined text.  

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

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

LineBreak

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

Hyperlink

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

   This text has a link in it.  

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

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

Run

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

Span

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

   This is a TextBlock with several Span elements, using a variety of styles .  

Таким образом, если ни один из элементов Вам не подходит, и вы просто хотите иметь «пустой контейнер» при форматировании текста — Span будет идеальным вариантом.

Форматирование текста из C#/CodeBehind

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

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.

This article has been fully translated into the following languages:

Is your preferred language not on the list? Click here to help us translate this article into your language!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *