Главная » Silverlight » Кнопки

0

Надстройка Silverlight распознает три типа простых кнопок: Button (Кнопка), CheckBox (Флажок) и RadioButton (Переключатель). Все эти элементы управления на­следуют классы ButtonBase и ContentControl.

Класс ButtonBase содержит всего несколько самых необходимых членов. В нем определены событие Click и свойства isFocused, isMouseOver и isPressed, имеющие статус "только чтение". Кроме того, класс ButtonBase содержит свойство ClickMode, определяющее, когда генерируется событие Click в ответ на действие мыши. По умол­чанию оно имеет значение ClickMode .Release, при котором событие Click генери­руется в момент отпускания кнопки мыши. При значении ClickMode . Press событие Click генерируется в момент первого нажатия кнопки мыши. Значение ClickMode. Hover задает генерацию события Click, когда пользователь наведет указатель на кноп­ку и на некоторое время задержит его.

Обычную кнопку Button мы уже неоднократно обсуждали. В следующих разде­лах рассматриваются специализированные типы кнопок (включая упомянутые выше CheckBox и RadioButton).

Кнопка HyperlinkButton

Кнопка Button довольно простая: пользователь щелкает на ней, и она генериру­ет событие Click, обрабатываемое в коде. В отличие от нее, кнопка HyperlinkButton дает команду браузеру перейти к другой веб-странице и завершает текущее прило­жение Silverlight. Элемент Hyperlinkbutton не отображает фон, как обычная кнопка. В отличие от нее, он просто выводит значение свойства Content. По умолчанию текст выводится синего цвета, не подчеркнутый. Задать подчеркивание можно с помощью свойства TextDecorations. При наведении указателя на кнопку HyperlinkButton он принимает форму руки, сигнализируя о том, что указатель наведен на гиперссылку. При необходимости этот эффект можно переопределить с помощью свойства Cursor.

Существует три способа использования кнопки HyperlinkButton.

• Перенаправление браузера на внешний веб-сайт. Для этого присвойте свой­ству NavigateUri абсолютный URL, указывающий на целевую веб-страницу. Можете также присвоить свойству TargetName имя фрейма, в котором нужно открыть страницу. Учитывайте, что при уходе с текущей страницы приложение

Silverlight завершается. По этой причине данный способ использования кнопки HyperlinkButton применяется редко.

•       Передача фрейма другой странице Silverlight. Убедитесь в том, что на стра­нице есть элемент управления Frame, и присвойте свойству NavigateUri отно­сительный URI, указывающий на другой файл XAML в текущем проекте. Данный способ более подробно рассматривается в главе 7.

•       Выполнение какой-либо операции в коде. Не устанавливайте свойство Navi­gateUri. Вместо этого создайте обработчик события Click, выполняющий нуж­ную операцию.

Совет. Входная страница HTML может предотвратить навигацию к внешнему веб-сайту. Для этого нужно добавить параметр enableNavigation в раздел <object> входной страницы и присвоить ему значение false. При этом останется возможность использовать HyperlonkButton для внутренней навигации по фреймам (см. главу 7) или для запуска обработчика события Click.

ToggleButton и RepeatButton

Кроме кнопок Button и HyperlinkButton, еще две кнопки наследуют класс

ButtonBase.

•       RepeatButton используется для непрерывной генерации серии событий Click до тех пор, пока кнопка мыши не будет отпущена. Другие кнопки при щелчке гене­рируют только одно событие Click.

•       ToggleButton может находиться в одном из двух состояний: включенном или вы­ключенном. После щелчка на кнопке она переходит во включенное состояние и остается в нем до тех пор, пока пользователь не щелкнет на ней еще раз.

RepeatButton и ToggleButton определены в пространстве имен System. Windows . Controls . Primitives. Название пространства имен явно намекает на то, что сами по себе эти кнопки используются редко. Обычно они используются для соз­дания более сложных элементов управления методом наследования или композиции. Например, кнопка RepeatButton применяется для создания высокоуровневого элемента управления ScrollBar, который сам является всего лишь компонентом еще более высо­коуровневого элемента ScrollViewer. В этой конструкции элемент RepeatButton игра­ет роль маленькой кнопки со стрелкой, расположенной в конце полосы прокрутки. При щелчке на ней события Click периодически генерируются с большой частотой до тех пор, пока не будет отпущена кнопка мыши. Аналогично кнопка ToggleButton исполь­зуется в качестве базового класса для более полезных кнопок CheckBox и RadioButton, описанных далее. Однако ни RepeatButton, ни ToggleButton не являются абстракт­ными классами, поэтому их можно использовать непосредственно в пользовательском интерфейсе или для создания пользовательских элементов управления.

Кнопка CheckBox

CheckBox (Флажок) и RadioButton (Переключатель) наследуют класс ToggleButton. Это означает, что они могут находиться в одном из двух состояний: включенном или выключенном (установленном или снятом). В элементе CheckBox включенное состояние обозначается галочкой, размещенной в небольшом квадратике.

Класс CheckBox не добавляет ни одного открытого члена, весь интерфейс элемента CheckBox определен в классе ToggleButton. Наиболее важное свойство IsChecked до­бавлено в классе ToggleButton. Оно может принимать одно из трех значений: true, false и null. Значение null обозначает неопределенное состояние. Когда оно уста­новлено, элемент выглядит на экране затененным (обратите внимание: в приложени­ях Windows затенение флажка означает режим "только чтение"). Неопределенное со­стояние флажка используется, когда "истинное" значение не известно или когда нельзя определенно сказать "да" или "нет". Предположим, флажок предназначен для примене­ния полужирного шрифта к выделенному фрагменту текста. Если выделить фрагмент, в котором все символы выведены обычным шрифтом, флажок отображается в снятом состоянии, а если полужирным, — то в установленном состоянии. Однако как должен выглядеть флажок, если в выделенном фрагменте часть символов представлена полу­жирным шрифтом, а часть —- обычным? Очевидно, он должен быть отображен в со­стоянии null.

В разметке Silverlight присвоить флажку значение null можно с помощью расши­рения х:Null.

<CheckBox IsChecked="(x:Null}"

Content="Флажок в неопределенном состоянии">

</CheckBox>

Кроме свойства IsChecked, класс ToggleButton добавляет свойство IsThreeState, которое определяет, может ли пользователь переключить флажок в неопределенное со­стояние. По умолчанию свойство IsThreeState-имеет значение false, в результате чего щелчок мышью переключает флажок в одно из двух состояний: либо true, либо false. Однако при этом все же можно установить флажок в неопределенное состояние посредством кода. Если свойство IsThreeState имеет значение true, то последователь­ность щелчков на флажке приводит к проходу по трем состояниям.

В классе ToggleButton определены три события (Checked, Unchecked и Indeterminate), генерируемые в момент переключения флажка в соответствующее со­стояние. Однако в большинстве случаев легче объединить логику обработки событий в одном обработчике события Click, наследуемого от ButtonBase. Событие Click гене­рируется при переключении флажка в любое состояние.

Кнопка RadioButton

Кнопка RadioButton (Переключатель) тоже наследует класс ToggleButton, поэто­му в ней доступны то же свойство IsChecked и те же события Checked, Unchecked и Indeterminate. Кроме указанных членов, класс RadioButton добавляет свойство GroupName, позволяющее объединить несколько переключателей в одну группу.

Обычно переключатели группируются в контейнере. Это означает, что при размеще­нии трех переключателей в одном контейнере StackPanel они образуют группу, в ко­торой может быть установлен только один из трех переключателей. Если разместить переключатели в двух отдельных контейнерах StackPanel, они будут объединены в две отдельные группы.

Свойство GroupName позволяет переопределить группирование переключателей. С его помощью можно, например, создать несколько групп в одном контейнере или определить одну группу в нескольких контейнерах. Необходимо лишь присвоить пере­ключателям, которые нужно включить в группу, одно и то же имя группы (рис. 5.8).

<StackPanel>

<Border Margin="5" Padding="5" BorderBrush="Yellow" BorderThickness="l" CornerRadius="5"> <StackPanel> <RadioButton Content=’Tpynna l"></RadioButton> <RadioButton Content=’Tpynna l"></RadioButton> <RadioButton Content=’Tpynna l"></RadioButton>

<RadioButton GroupName="Group3" Content="tpynna 3"> </RadioButton> </StackPanel> </Border>

<Border Margin="5" Padding="5" BorderBrush="Yellow" BorderThickness="l" CornerRadius="5"> <StackPanel> <RadioButton Content=’Tpynna 2"></RadioButton> <RadioButton Content=’Tpynna 2"></RadioButton> <RadioButton Content=’Tpynna 2"></RadioButton> <RadioButton GroupName="Group3" Content=’Tpynna 3"> </RadioButton> </StackPanel> </Border> </StackPanel>

Рис. 5.8. Группирование переключателей

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии