Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Windows Presentation Foundation.docx
Скачиваний:
12
Добавлен:
13.08.2019
Размер:
1.13 Mб
Скачать

7. Обзор элеменТов управления

Рис. 11. Элементы управления.

Формально, к элементам управления относятся классы, унаследованные от классаControl. Рассмотрим некоторые собственные свойства этого класса, разбив их на группы:

  1. Внешний вид: свойство Templateзадаёт шаблон1, полностью определяющий внешний вид элемента управления.

  2. Позиционирование:свойстваPadding,HorizontalContentAlignmentиVerticalContentAlignment.

  3. Цвета и окантовка:

  • Foreground–кисть (цвет) для отображения содержимого;

  • Background–кисть для фона элемента;

  • BorderBrush и BorderThickness–кисть и ширина окантовки.

  1. Шрифт содержимого:

  • FontFamily– имя семейства шрифтов (например, "Arial").Можно указать несколько шрифтов, разделяя их запятыми– WPF выберет первый установленный в системе шрифт из списка2;

  • FontSize– размер шрифта в единицах WPF. Обычные Windows-приложения измеряют шрифты с помощью точек (points), которые равны дюйма на стандартном мониторе. Этот размер нужно умножить на , чтобы получить размер в единицах WPF;

  • FontStyle– наклон текста (объект FontStyle). Необходимый предварительно заданный набор можно получить из статических свойств класса FontStyles: Normal, Italic или Oblique;

  • FontWeight–вес текста (объект FontWeight).Предварительно заданный набор можно получить, используя статические свойства класса FontWeight;

  • FontStretch– величина, на которую растягивается или сжимается текст (объект FontStretch).

  1. Табуляция: целочисленное свойство TabIndexи булево IsTabStop.

Элементы управления содержимым

Элементы управления содержимым – это элементы, допускающие размещение единственного дочернего элемента, представляющего их содержимое. Элементы управления содержимым наследуются от класса ContentControl. У этого класса имеется объектное свойство Content и булево свойство HasContent.Если в Content помещается объект-наследник UIElement, для отображения вызывается метод OnRender()этого объекта. Для объектов других типов делается попытка применить шаблон данных. Если шаблон данных не задан в свойстве ContentTemplateили в ресурсах приложения, у дочернего элемента вызывается ToString(), а результат обрамляется в элемент TextBlock.

Элементы управления содержимым можно разбить на три подгруппы: кнопки, простые контейнеры, контейнеры с заголовком.

Все кнопки наследуются от абстрактного класса ButtonBase. Этот класс содержит событие Click, булево свойство IsPressedи свойство ClickMode– оноопределяет момент генерирования Click. Значениями ClickMode являются элементы одноимённого перечисления: Release (по умолчанию), Press иHover.

Элемент управленияButton определяет обычную кнопку, которая может быть кнопкой по умолчанию или кнопкой отмены. Это поведение контролируется булевыми свойствами IsDefault и IsCancel. Кнопка по умолчанию срабатывает при нажатии на клавиатуреENTER, кнопка отмены – при нажатии ESC.

ЭлементRepeatButton–кнопка, непрерывно генерирующая событие Click, если на ней задержать нажатие. Частота генерации события Clickопределяется свойствами Delayи Interval (целое число миллисекунд).

ToggleButton–кнопка с «залипанием». Будучи нажатой, она остаётся в таком состоянии, пока по ней не произведут повторное нажатие. Текущее состояние кнопки определяется свойствомIsChecked с типом bool?(если свойство IsThreeStateустановлено в true, нажатия на кнопку заставляют IsCheckedменяться по схеме «true-null-false»). При изменении свойства IsChecked кнопка ToggleButton генерирует события Checked, UncheckedиIndeterminate.

В WPFфлажок-переключатель формально относится к кнопкам и представлен классом CheckBox. Этот класс является прямым наследником ToggleButton с переписанным шаблоном внешнего вида.

Элемент управления RadioButton также унаследован от ToggleButton. Особенность RadioButton– поддержка группового поведения, при котором установка одного переключателя сбрасывает остальные. По умолчанию к одной группе относятся переключатели, имеющие общий родительский контейнер. Можно задать строковое свойство RadioButton.GroupName, чтобы определить собственный способ выделения группы переключателей.

<StackPanel Margin="10">

<Button Content="Ordinary Button" FontFamily="Arial"

Click="Button_Click" />

<CheckBox IsChecked="True" Content="CheckBox" />

<RadioButton GroupName="A">Option 1</RadioButton>

<RadioButton GroupName="A">Option 2</RadioButton>

<RadioButton GroupName="B">A Different Option 1</RadioButton>

<RadioButton GroupName="B">A Different Option 2</RadioButton>

</StackPanel>

privatevoid Button_Click(object sender, RoutedEventArgs e)

{

Title = "Button pressed";

}

Рис. 12. Кнопка, флажок, две группы RadioButton.

Перейдём к разборупростых контейнеров, которые (согласно своему названию) предназначены для простого обрамления дочернего содержимого. Один из простых контейнеров–элемент Label. Обычно он используется для представления текста, но в WPFего содержимое может быть любым. ОсобенностьLabel – поддержка «горячих клавиш», при помощи которых фокус ввода передаётся заданному элементу управления. Вот типичный пример такого использования Label (обратите внимание на синтаксис задания свойства Target и на применение символа подчёркивания для указания «горячей клавиши»U):

<Label Target="{Binding ElementName=userName}"Content="_User:"/>

<TextBoxx:Name="userName"/>

Элемент управления ToolTip отображает своё содержимое в виде всплывающей подсказки. ToolTip может содержать любые элементы управления, но с ними нельзя взаимодействовать.ToolTip определяет события Openи Close, а также несколько свойств для настройки своего поведения и внешнего вида. Особенность ToolTip в том, что этот элемент нельзя поместить в дерево элементов. Вместо этого требуется задавать одноимённое свойство, определённое в классе FrameworkElement.

<CheckBox Content="Simple CheckBox">

<CheckBox.ToolTip>

<StackPanel>

<Label FontWeight="Bold" Background="Blue"

Foreground="White" Content="The CheckBox"/>

<TextBlock Padding="10" TextWrapping="WrapWithOverflow"

Width="200">

CheckBox is a familiar control. But in WPF, it’s not

muchmore than a ToggleButton styled differently!

</TextBlock>

</StackPanel>

</CheckBox.ToolTip>

</CheckBox>

Рис. 13. Сложная всплывающая подсказка.

Элемент управления Frameпредназначен для изолирования своего содержимого от остальной части пользовательского интерфейса. Этот элемент напоминает аналог из HTML. Более того, Frameдействительно может отображать HTMLили XAML-страницу, если использовать его свойство Source:

<Frame Source="http://www.pinvoke.net"/>

Последняя группа элементов управления содержимым – контейнеры с заголовком. Эти элементы наследуются от класса HeaderedContentControl, который добавляет объектное свойство Headerк классу ContentControl.

Простейший контейнер с заголовком представлен элементомGroupBox. Следующий пример демонстрирует использование GroupBox для группировки нескольких флажков:

<GroupBox Header="Grammar">

<StackPanel>

<CheckBox Content="Check grammar as you type" />

<CheckBox Content="Hide grammatical errors" />

<CheckBox Content="Check grammar with spelling" />

</StackPanel>

</GroupBox>

Подчеркнём, что в заголовок контейнера может быть помещено любое содержимое– например, кнопка:

<GroupBox.Header>

<Button>Grammar</Button>

</GroupBox.Header>

Элемент управления Expander напоминает GroupBox, но содержит в заголовке кнопку, которая позволяет спрятать и показать содержимое контейнера. Можно настроить направление «разворачивания» контейнера.

<Expander Header="Grammar">

<StackPanel>

<!-- содержимое StackPanel- три переключателя -->

</StackPanel>

</Expander>

Рис. 14. Expander, раскрытый вниз.