Главная » WPF » Библиотека элементов управления

0

Вооружившись двумя  важнейшими концепциями – моделью содержимого  и шаблонами,  мы можем  начать обзор библиотеки  элементов  управления, входя# щей в состав  WPF. В ней имеются  почти  все стандартные  элементы,  которые принято  включать  в любой пакет для создания  графических интерфейсов (за немногими  исключениями, например, DataGrid). Поскольку модель содержимо# го и шаблоны позволяют  изменять  способ визуализации в очень широких преде# лах, то определяющим признаком элемента  управления становится его модель данных и модель взаимодействия.

Кнопки WPF

Наше  путешествие  естественно  начать с элемента  Button. Важнейшей особен# ностью кнопки является ее «нажимаемость»3. К событию Click, унаследованному от ButtonBase, класс Button не добавляет разве что внешний вид стандартной кнопки.

Классы CheckBox  и RadioButton представляют кнопки с переключением, име#

ющие  свойства  IsChecked (модель  данных)  и  IsThreeState (модель  взаимодей#

3  В какой)то момент мы подумывали назвать базовый класс не ButtonBase, а

System.Windows.Controls.Clickable, но потом отказались от этой идеи.

ствия).  Если IsThreeState равно True, то, щелкая  по флажку,  пользователь может переводить  его в одно из трех состояний:  Checked,  Unchecked или Indeterminate. Если  же IsThreeState равно False, то пользователь никакими манипуляциями не сможет получить состояние Indeterminate, хотя его можно установить программно.

На рис. 3.12 показана  иерархия  класса Button. Классы  ButtonBase и ToggleButton служебные, напрямую  они, как правило,  не используются. Однако классы  Button, CheckBox  и RadioButton расширяют  их, реализуя конкретную стратегию  взаимодействия с пользователем (так,  RadioButton гарантирует,  что отмечена будет только одна из набора кнопок) и визуальное  представление (RadioButton рисуется в виде привычного  набора переключателей).

Рис. 3.13. Несколько элементов управления, производных от кнопки

В следующем примере  демонстрируется стандартный внешний  вид всех трех кнопочных элементов  управления:

<StackPanel Orientation=’Horizontal’>

<Button Margin=’5’ VerticalAlignment=’Top’>Click</Button>

<StackPanel Margin=’5’ VerticalAlignment=’Top’>

<CheckBox IsChecked=’True’>Click</CheckBox>

<CheckBox IsChecked=’False’>Click</CheckBox>

<CheckBox IsChecked=’{x:Null}’>Click</CheckBox>

</StackPanel>

<StackPanel Margin=’5’ VerticalAlignment=’Top’>

<RadioButton>Click</RadioButton>

<RadioButton IsChecked=’True’>Click</RadioButton>

<RadioButton>Click</RadioButton>

</StackPanel>

</StackPanel>

Как видно из рис. 3.13, эти элементы похожи на встроенные в Windows4, а, за# пустив программу, вы убедитесь, что логика взаимодействия ничем не отличает# ся. Мы хотели, чтобы основные элементы  в WPF были идентичны  встроенным  с точностью до пикселя5.

4  Интересно отметить, что в WPF для обозначения клавиши)акселератора применяется символ "_", а не "&". Поэтому, чтобы создать кнопку с надписью "OK" и сделать клавишу "O" акселератором, надо было бы написать <Button>_OK</Button>. Это изменение было внесено, главным образом, из)за того, что правила XML требуют вместо символа "&" всюду писать "&amp;", а это слишком длинно.

5  Насколько это возможно, конечно.

Списки

Одна  из самых распространенных задач в любом приложении – отображе# ние списка данных. Списковые элементы  управления в WPF обеспечивают двоякую функциональность: отображение  списка данных и возможность выбо# ра из него одного или нескольких  элементов.  В ходе разработки  WPF мы мно# го спорили,  сколько  включить  списковых  элементов  управления. Из#за нали# чия  в  WPF  шаблонов   такие  элементы,   как  ListBox,  ComboBox, DomainUpDown и даже нечто похожее на список переключателей различают# ся лишь шаблонами, надстроенными над одним базовым элементом. В конце концов  было решено поставлять все привычные  элементы  управления, но от# давать предпочтение  не новым элементам, а шаблонам (именно  поэтому был исключен  элемент  RadioButtonList, который  присутствовал в бета#версии).  В WPF есть четыре стандартных  списковых  элемента: ListBox, ComboBox, ListView  и TreeView.

Данные для любого спискового элемента могут поступать из двух источников: свойство  ItemsSource или  свойство  Items.  Свойство  Items  помещает  данные  во внутренний список:

ListBox list = new ListBox(); list.Items.Add(«a»); list.Items.Add(«b»);

С помощью свойства ItemsSource элементу передается набор данных, который отображается в списке:

string[] items = new string[] { «a», «b» }; ListBox list = new ListBox(); list.ItemsSource = items;

Между этими способами  есть тонкое, но важное различие: свойство ItemsSource позволяет  хранить данные отдельно от элемента управления.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

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