В чем разница между элементом WPF TextBlock и элементом управления Label?

Визуально оба следующих фрагмента создают одинаковый пользовательский интерфейс. Так почему там 2 регулятора ..
Snippet1

<TextBlock>Name:</TextBlock>
<TextBox Name = "nameTextBox" />

Snippet2

<Label>Name:</Label>
<TextBox Name = "nameTextBox" />

(Что ж, я собираюсь ответить на это сам ... подумал, что это полезный лакомый кусочек, который я узнал сегодня от Программирование WPF)

@Rachel Почему этот вопрос отмечен как дубликат того, который был написан 3 года спустя (особенно учитывая, что у этого больше голосов и лучшие ответы)?

BlueRaja - Danny Pflughoeft 16.06.2015 06:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
102
1
62 499
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ярлык несет важную ответственность обработка фокуса. Его цель - позволить вам разместить заголовок с ключом доступа. У него есть свойство Цель, которое указывает цель ключа доступа. Так...

<Label Target = "{Binding ElementName=nameTextBox}">_Name:</Label>
<TextBox x:Name = "nameTextBox" />

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

Есть ли способ получить метку, предназначенную для TextBox, имеющую TextBox?

Arsen Mkrtchyan 04.04.2012 14:31

@ArsenMkrt - вы имеете в виду текстовое поле, содержащее другое текстовое поле? Если у него уникальное elementName, оно должно работать.

Gishu 04.04.2012 15:47

Нет @Gishu, я имею в виду, что это единственный способ найти Label, ориентированный на TextBox в вашем примере выше, для перечисления визуального дерева?

Arsen Mkrtchyan 04.04.2012 15:53

@ArsenMkrt - Не уверен, но маловероятно. Вы можете перейти от цели привязки к источнику (метка в текстовое поле) ... но не наоборот. Зачем вам это ?

Gishu 05.04.2012 10:03

Я хочу регистрировать активность пользователя в своей форме и хочу иметь какой-то уникальный идентификатор для каждого элемента пользовательского интерфейса, думал о создании идентификатора из содержимого метки в случае отсутствия имени, но я думаю, не очень хорошая идея, что-то вроде я описанный здесь stackoverflow.com/questions/9996145/…

Arsen Mkrtchyan 05.04.2012 10:44

@ArsenMkrt - Разве ViewModel не лучшее место для этой логики - отслеживания действий. Если пользователь обновляет поле ... вы можете войти в установщик привязанного свойства виртуальной машины.

Gishu 05.04.2012 10:46

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

Arsen Mkrtchyan 05.04.2012 10:54
Ответ принят как подходящий

Текстовый блок WPF наследуется от FrameworkElement, а не от System.Windows.Control, как элемент управления Label. Это означает, что текстовый блок намного легче. Обратной стороной использования текстового блока является отсутствие поддержки клавиш доступа / акселератора и отсутствие ссылки на другие элементы управления в качестве цели.

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

Если вы хотите связать текст с другим элементом управления, например TextBox, используйте элемент управления Label. Преимущества - ключи доступа и ссылки на целевой элемент управления.

@Kugel: Я не вижу ссылки на Label на связанной странице, поэтому я не понимаю, почему это оправдывает то, что TextBlock медленнее, чем Label. Не могли бы вы уточнить? Если Label использует TextBlock для рендеринга, как предполагает joshsmithonwpf.wordpress.com/2007/07/04/…, что делает TextBlock медленнее?

Mashmagar 09.05.2012 18:34

Метка может использоваться как альтернатива TextBlock в ситуациях, когда требуется минимальная поддержка текста, например метка для элемента управления. Использование Label может быть выгодным, поскольку требует еще меньше ресурсов (меньший вес), чем TextBlock.

Это неверно. TextBlock - самый простой (легкий) из двух. Он происходит от FrameworkElement .. См. Самый популярный ответ.

Gishu 09.07.2009 18:50

Я полагаю, что с TextBlock мы можем легко получить поддержку нескольких линий - используя TextWrapping.

Использование Label в таких случаях, например при отображении сообщения проверки необходимо использовать теги <AccessKey>, которые менее просты, чем TextBlock.

С другой стороны, использование TextBlock не позволяет нам установить свойство BorderBrush.

Итак, на мой взгляд, эти два элемента управления должны быть объединены в полнофункциональный текстовый элемент.

За исключением того, что TextBlock не является элементом управления, поэтому есть довольно серьезная причина против их объединения.

Joey 07.04.2017 17:28

Две самые большие причины путаницы с текстовыми блоками и метками - это Windows Forms и здравый смысл.

  1. Когда вы хотели добавить небольшой фрагмент текста в форму в Windows Forms, вы использовали метку, поэтому следует (неверно), что вы сделали бы то же самое с меткой WPF.

  2. Здравый смысл заставит вас поверить, что Label легкий, а TextBlock - нет, когда верно обратное.

Обратите внимание, что вы можете поместить TextBlock внутри Label.

Label принимает всевозможные входные данные, такие как String, Number и т. д. TextBlock, как следует из названия, принимает только текстовую строку.

Другие вопросы по теме