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

Списковые элементы управления

Списковые элементы управления(кратко –списки) могут хранить и представлять коллекцию элементов списка.Для большинства списков доступна гибкая настройка внешнего вида, а также функции фильтрации, группировки и сортировки данных, однако в данном параграфе рассматриваются только простейшие аспекты работы со списками.

Все списки наследуются от класса ItemsControl, который определяет несколько полезных свойств:

  • Items– коллекция ItemCollection, сохраняющая элементы списка (свойство доступно только для чтения).

  • ItemsSource–свойство позволяет связать список с коллекцией данных. Свойство доступно для установки во время выполнения приложения.

  • HasItems– булево свойство только для чтения. Показывает, имеются ли элементы в списке.

  • DisplayMemberPath– строковое свойство, определяющее отображаемое значение для элемента списка.DisplayMemberPath поддерживает синтаксис, который называется путь к свойству.Путь к свойству напоминает запись свойства агрегированного объекта, но без операций приведения типа. Например, если у кнопки btn задать в качестве содержимого строку, путь к свойству в виде "btn.Content[0]"будет означать первый символ строки.

В разметке XAMLдочерние объекты списка автоматически рассматриваются как элементы списка. Правила отображения отдельного элемента аналогичны правилам, применяемым при показе содержимого ContentControl.

Списковые элементы управления можно разделить на три подгруппы:

  1. Селекторы.

  2. Меню.

  3. Списки без категории.

Селекторы допускают индексацию и выбор элементов списка. К селекторам относятся элементы управления ComboBox, ListBox, ListView, DataGridи TabControl.Все селекторы наследуются от абстрактного класса Selector, которыйпредоставляет следующие свойства и события:

  • SelectedIndex–целочисленный индекс (первого) выбранного элемента (или -1, если ничего не выбрано).

  • SelectedItem–(первый) выбранный элемент списка.

  • SelectedValue – значение выбранного элемента. Если не используется SelectedValuePath, значение совпадает с SelectedItem.

  • SelectedValuePath –путь к свойству, определяющий значение выбранного элемента.

  • SelectionChanged – событие, генерируемое при изменении SelectedItem.

В классе Selector определены два присоединяемых булевых свойства, используемых с элементами списка,–IsSelected и IsSelectionActive. Второе свойство является свойством только для чтения и позволяет узнать, установлен ли на выделенном элементе фокус. Кроме этого, класс Selectorимеет два присоединяемых события – Selectedи Unselected.

Элемент управления ListBox отображает список и допускает множественный выбор элементов. Эта возможность настраивается при помощи свойства SelectionMode, принимающего значения из одноимённого перечисления:

  • Single(по умолчанию) – можно выбрать только один элемент списка.

  • Multiple – можно выбрать несколько элементов. Щелчок по невыбранному элементу выбирает его, и наоборот.

  • Extended– можно выбрать несколько элементов, используя клавиши SHIFTи CTRL.

У ListBox имеется коллекция SelectedItems, содержащая выбранные элементы списка. Каждый элемент в ListBox представлен объектом класса ListBoxItem, в котором определено булево свойство IsSelectedи событияSelected и Unselected.В разметке XAMLListBoxItem можно не использовать. Анализатор XAMLвыполняет самостоятельное «оборачивание» дочерних элементов в объекты ListBoxItem(замечание справедливо и для других списков).

<ListBox SelectionMode="Multiple">

<TextBlock>First Item</TextBlock>

<TextBlock>Second Item</TextBlock>

<Button>Third Item</Button>

</ListBox>

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

Класс ComboBox позволяет выбрать один элемент из списка, отображая текущий выбор и раскрывая список элементов по требованию. Отдельный элемент ComboBox представлен объектом ComboBoxItem (унаследованным от ListBoxItem).

<Canvas>

<ComboBox Name="cbx" SelectedIndex="0" Width="134">

<ComboBoxItem>First Item</ComboBoxItem>

<ComboBoxItem>Second Item</ComboBoxItem>

<ComboBoxItem>Third Item</ComboBoxItem>

</ComboBox>

<Button Padding="10,3" Canvas.Right="5" Canvas.Bottom="5"

Content="Enter" Click="Button_Click" />

</Canvas>

privatevoid Button_Click(object sender, RoutedEventArgs e)

{

MessageBox.Show(cbx.SelectionBoxItem.ToString(), "Selected");

}

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

Для описания состояния списка служит булево свойство IsDropDownOpen и связанные события DropDownOpened/DropDownClosed. Свойства IsEditableиIsReadOnly могут использоваться, чтобы подсвечивать и отображать элемент списка при вводе текстовой информации, связанной с элементом.Текстовая информация определяется в элементе списка при помощи свойства TextSearch.Text или в самом ComboBox при помощи свойства TextSearch.TextPath.

Элемент управления ListView унаследован от ListBox. Этот список позволяет настроить свой внешнийвид при помощи свойства Viewс типомViewBase. В WPFимеется один наследник абстрактного класса ViewBase –класс GridView. При помощи GridViewэлемент управления ListView отображает данные в виде таблицы с колонками. Каждая колонкатаблицы GridView – это объект класса GridViewColumn, помещённый в коллекцию GridView.Columns. У колонки настраивается ширина, заголовок, отображаемые в колонке значения. GridView поддерживает изменение размеров колонок и их перетаскивание во время работы приложения.

<ListView xmlns:sys="clr-namespace:System;assembly=mscorlib">

<ListView.View>

<GridView>

<GridViewColumn Header="Date" Width="70"/>

<GridViewColumn Header="Day of Week"

DisplayMemberBinding="{Binding DayOfWeek}"/>

<GridViewColumn Header="Year"

DisplayMemberBinding="{Binding Year}"/>

</GridView>

</ListView.View>

<sys:DateTime>1/1/2010</sys:DateTime>

<sys:DateTime>1/2/2010</sys:DateTime>

<sys:DateTime>1/3/2010</sys:DateTime>

</ListView>

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

Элемент управления TabControl– это простой наборстраницсзакладками:

<TabControl SelectedIndex="2">

<TabItem Header="Tab 1">Content for Tab 1</TabItem>

<TabItem Header="Tab 2">Content for Tab 2</TabItem>

<TabItem Header="Tab 3">Content for Tab 3</TabItem>

</TabControl>

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

По умолчанию закладки в TabControlрасположены вверху. Их положение можно изменить, используя свойство TabStripPlacement. Каждая страница в TabControl– это объект класса TabItem. Класс TabItem –контейнер с заголовком (подобно элементам GroupBox или Expander).

Перейдем к рассмотрению элементов управления из категории меню – Menuи ContextMenu.Класс Menuможет содержать коллекцию любых объектов, но ожидается, что будут использованы объекты MenuItemиSeparator.Separator – простой элемент, представляющий разделитель пунктов меню. MenuItem– это контейнер с заголовком (наследникHeaderedItemsControl). В случае MenuItem заголовок определяет отображаемый пункт меню, а свойство содержимого Items может содержать элементы подменю. MenuItemподдерживает «горячие клавиши». Этот класс также содержит свойства Iconи IsCheckableи определяет события Checked, Unchecked, SubmenuOpened, SubmenuClosed, Click.

<DockPanel LastChildFill="False">

<Menu DockPanel.Dock="Top">

<MenuItem Header="_File">

<MenuItem Header="_New..."/>

<MenuItem Header="_Open..."/>

<Separator/>

<MenuItem Header="Sen_d To">

<MenuItem Header="Mail Recipient"/>

<MenuItem Header="My Documents"/>

</MenuItem>

</MenuItem>

<MenuItem Header="_Edit"></MenuItem>

<MenuItem Header="_View"></MenuItem>

</Menu>

</DockPanel>

Рис. 19.Пример меню.

Класс ContextMenu служит для представления контекстного меню некоторого элемента.ОбъектContextMenu нельзя поместить в дерево элементов, а следует задавать как значение одноимённого свойства, определённого в классе FrameworkElement.

<ListBox>

<ListBox.ContextMenu>

<ContextMenu><!-- пункты меню --></ContextMenu>

</ListBox.ContextMenu>

</ListBox>

ContextMenu – этоконтейнеробъектовMenuItem.В классе ContextMenu определено несколько свойств для настройки места появления контекстного меню относительно элемента, с которым оно связано.

Рассмотрим списковые элементы без категории. Элемент управления TreeView отображает иерархию данных в виде дерева с узлами, которые могут быть свернуты и раскрыты. Каждый элемент в TreeView является объектом TreeViewItem. Класс TreeViewItem напоминает MenuItem – это тоже контейнер с заголовком Header и коллекцией дочерних элементов Items. TreeViewItemсодержитбулевысвойстваIsExpandedиIsSelected, атакжесобытияExpanded, Collapsed, Selected, Unselected.

<TreeView>

<TreeViewItem Header="Desktop">

<TreeViewItem Header="Computer" />

<TreeViewItem Header="Recycle Bin" />

<TreeViewItem Header="Control Panel">

<TreeViewItem Header="Programs" />

<TreeViewItem Header="Security" />

<TreeViewItem Header="User Accounts" />

</TreeViewItem>

<TreeViewItem Header="Network" />

</TreeViewItem>

</TreeView>

Рис. 20.ПростойTreeView.

Элемент управления ToolBarпредставляет панель инструментов. Он просто группирует кнопки, разделители (Separator) и другие дочерние элементы на одной панели1. Хотя ToolBar можно разместить в произвольном месте, обычно один или несколько таких объектов размещают внутри элемента ToolBarTray, что позволяет перетаскивать и переупорядочить панели инструментов.Элемент управления SatusBar группирует элементы подобно ToolBarили Menu.Обычно элементSatusBarразмещается в нижней части окна.