TOC

This article has been localized into Ukrainian by the community.

Основні елементи керування:

Елемент керування Label

Елемент Label, у найпростішій формі, буде дуже схожий на TextBlock, який ми використовували в іншій статті. Ви швидко помітите, що замість властивості Text Label має властивість Content. Причина в тому, що Label може розміщувати будь-який тип керування безпосередньо всередині себе, а не просто текст. Цей вміст також може бути рядком, хоча, як ви бачите в цьому першому і дуже простому прикладі:

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlSample" Height="100" Width="200">
    <Grid>
		<Label Content="This is a Label control." />
	</Grid>
</Window>

Інша річ, яку ви могли б помітити, це те, що Label, за замовчуванням, має деяке заповнення, що дозволяє відтворювати текст в декількох пікселях від верхнього лівого кута. Це не стосується керування TextBlock, де вам доведеться вказувати його (контент) вручну.

У такому простому випадку, де вміст - це просто рядок, мітка фактично створить внутрішній текстовий блок і покаже ваш рядок у ньому.

Label проти TextBox

Так навіщо тоді використовувати Label? Ну, є кілька важливих відмінностей між Label і TextBlock. TextBlock дозволяє лише відображати текстовий рядок, а Label також дозволяє:

  • Точне визначення таблиці
  • Відображення інших елементів управління, зокрема зображень
  • Створення шаблонного вмісту за допомогою властивості ContentTemplate
  • Використання ключів доступу для фокусування на пов'язаних елементах управління

Останній пункт - це насправді одна із головних причин використовувати Label замість елементу управління TextBlock. Завжди, коли вам потрібно візуалізувати простий текст, слід застосовувати TextBlock, оскільки від легший і у більшості випадків поводиться краще за Label

Label та ключі доступу (мнемоніка/mnemonics)

У Windows та інших операційних системах ви, зазвичай, можете отримати до доступ до елементу управління у діалоговому вікні, утримуючи [Alt] та натискаючи на символ, що відповідає за потрібний елемент управління. Символи, які можна натиснути, будуть підсвічені, коли ви затиснете [Alt]. TextBlock не підтримує цю функцію, на відміну від елементу Label, тож Label - це, як правило, чудовий вибір для написів. Давайте поглянемо на нього в дії.

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlSample" Height="180" Width="250">
	<StackPanel Margin="10">
		<Label Content="_Name:" Target="{Binding ElementName=txtName}" />
		<TextBox Name="txtName" />
		<Label Content="_Mail:" Target="{Binding ElementName=txtMail}" />
		<TextBox Name="txtMail" />
	</StackPanel>
</Window>

На скріншоті показано просте діалогове вікно, яке можна побачити при затисканні клавіші Alt. Спробуйте запустити його, утримувати [Alt] і натиснути N чи M. Ви побачете, як фокус рухається між двома текстовими полями.

По-перше, ми позначаємо ключі доступу, використовуючи нижнє відкреслення (_) перед символом. Воно не мусить бути перший знаком, а може знаходитись перед будь-яким символом у тексті підпису. Загальною практикою є використання першого знаку, шо ше не застосовується, як ключ доступу для іншого елементу управління.

Ми використовуємо властивість Target, щоб з'єднати Label та потрібний елемент управління. Для цього слід застосувати стандартну WPF прив'язку, використовуючи властивість ElementName, яку ми пізніше опишемо у цьому уроці. Прив'язка базується на назві елементу управління , тож якщо ви змінете її, то вам слід не забути змінити прив'язку.

Використання елементів управління в якості вмісту Label

Як уже згадано, елемент управління Label дозволяє контролювати інші елементи управління, все ще зберігаючи інші переваги. Давайте оглянемо приклад, який містить зображення та фрагмент тексту всередині елементу Label, і при цьому також має ключ доступу до всіх написів.

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlAdvancedSample" Height="180" Width="250">
	<StackPanel Margin="10">
		<Label Target="{Binding ElementName=txtName}">
			<StackPanel Orientation="Horizontal">
				<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
				<AccessText Text="_Name:" />
			</StackPanel>
		</Label>
		<TextBox Name="txtName" />
		<Label Target="{Binding ElementName=txtMail}">
			<StackPanel Orientation="Horizontal">
				<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
				<AccessText Text="_Mail:" />
			</StackPanel>
		</Label>
		<TextBox Name="txtMail" />
	</StackPanel>
</Window>

Це просто розширена версія попереднього прикладу. Замість звичайного рядка тексту, наш Label містить водночас зображення та фрагмент тексту (всередині елементу управління AccessText, який дозволяє все ще використовувати ключ доступу для напису). Обидва елементи управління знаходяться всередині горизонтальної StackPanel, оскільки Label, як похідна будь-якого ContentControl, може містити лише один дочірній елемент управління.

Елемент управління Image, буде описаний пізніше у цьому уроці. Використання віддаленого зображення тут лише для демонстрації і це НЕ добра ідея для більшості реальних застосунків.

Підсумок

У більшості випадків елемент управління Label робить те, що означає його назва. Він поводиться, як текстовий напис (підпис) для іншого елементу управління. Це головна мета його застосування. Для більшості інших випадків вам, мабуть, краще підійде елемент управління TextBlock або якийсь інший контейнер для тексту, із тих, що пропонує WPF.


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!