Визуально оба следующих фрагмента создают одинаковый пользовательский интерфейс. Так почему там 2 регулятора ..
Snippet1
<TextBlock>Name:</TextBlock>
<TextBox Name = "nameTextBox" />
Snippet2
<Label>Name:</Label>
<TextBox Name = "nameTextBox" />
(Что ж, я собираюсь ответить на это сам ... подумал, что это полезный лакомый кусочек, который я узнал сегодня от Программирование WPF)





Ярлык несет важную ответственность обработка фокуса. Его цель - позволить вам разместить заголовок с ключом доступа. У него есть свойство Цель, которое указывает цель ключа доступа. Так...
<Label Target = "{Binding ElementName=nameTextBox}">_Name:</Label>
<TextBox x:Name = "nameTextBox" />
В отсутствие свойства Target элемент управления Label не делает ничего полезного. Вы просто услышите звуковой сигнал, если нажмете клавишу доступа, указывающую, что невозможно обработать запрос.
Есть ли способ получить метку, предназначенную для TextBox, имеющую TextBox?
@ArsenMkrt - вы имеете в виду текстовое поле, содержащее другое текстовое поле? Если у него уникальное elementName, оно должно работать.
Нет @Gishu, я имею в виду, что это единственный способ найти Label, ориентированный на TextBox в вашем примере выше, для перечисления визуального дерева?
@ArsenMkrt - Не уверен, но маловероятно. Вы можете перейти от цели привязки к источнику (метка в текстовое поле) ... но не наоборот. Зачем вам это ?
Я хочу регистрировать активность пользователя в своей форме и хочу иметь какой-то уникальный идентификатор для каждого элемента пользовательского интерфейса, думал о создании идентификатора из содержимого метки в случае отсутствия имени, но я думаю, не очень хорошая идея, что-то вроде я описанный здесь stackoverflow.com/questions/9996145/…
@ArsenMkrt - Разве ViewModel не лучшее место для этой логики - отслеживания действий. Если пользователь обновляет поле ... вы можете войти в установщик привязанного свойства виртуальной машины.
Моя идеальная цель - создать журнал, который можно легко преобразовать в сценарий автоматизации пользовательского интерфейса, отслеживание активности виртуальной машины тоже может быть хорошей идеей ... сегодня немного подумаю, спасибо!
Текстовый блок WPF наследуется от FrameworkElement, а не от System.Windows.Control, как элемент управления Label. Это означает, что текстовый блок намного легче. Обратной стороной использования текстового блока является отсутствие поддержки клавиш доступа / акселератора и отсутствие ссылки на другие элементы управления в качестве цели.
Если вы хотите отображать текст отдельно, используйте TextBlock. Преимущество - легкий и эффективный способ отображения текста.
Если вы хотите связать текст с другим элементом управления, например TextBox, используйте элемент управления Label. Преимущества - ключи доступа и ссылки на целевой элемент управления.
@Kugel: Я не вижу ссылки на Label на связанной странице, поэтому я не понимаю, почему это оправдывает то, что TextBlock медленнее, чем Label. Не могли бы вы уточнить? Если Label использует TextBlock для рендеринга, как предполагает joshsmithonwpf.wordpress.com/2007/07/04/…, что делает TextBlock медленнее?
Метка может использоваться как альтернатива TextBlock в ситуациях, когда требуется минимальная поддержка текста, например метка для элемента управления. Использование Label может быть выгодным, поскольку требует еще меньше ресурсов (меньший вес), чем TextBlock.
Это неверно. TextBlock - самый простой (легкий) из двух. Он происходит от FrameworkElement .. См. Самый популярный ответ.
Я полагаю, что с TextBlock мы можем легко получить поддержку нескольких линий - используя TextWrapping.
Использование Label в таких случаях, например при отображении сообщения проверки необходимо использовать теги <AccessKey>, которые менее просты, чем TextBlock.
С другой стороны, использование TextBlock не позволяет нам установить свойство BorderBrush.
Итак, на мой взгляд, эти два элемента управления должны быть объединены в полнофункциональный текстовый элемент.
За исключением того, что TextBlock не является элементом управления, поэтому есть довольно серьезная причина против их объединения.
Две самые большие причины путаницы с текстовыми блоками и метками - это Windows Forms и здравый смысл.
Когда вы хотели добавить небольшой фрагмент текста в форму в Windows Forms, вы использовали метку, поэтому следует (неверно), что вы сделали бы то же самое с меткой WPF.
Здравый смысл заставит вас поверить, что Label легкий, а TextBlock - нет, когда верно обратное.
Обратите внимание, что вы можете поместить TextBlock внутри Label.
Label принимает всевозможные входные данные, такие как String, Number и т. д. TextBlock, как следует из названия, принимает только текстовую строку.
@Rachel Почему этот вопрос отмечен как дубликат того, который был написан 3 года спустя (особенно учитывая, что у этого больше голосов и лучшие ответы)?