Для оформления внешнего вида элемента можно использовать стили <ListView. ItemContainerStyle> и шаблоны.
Отделение элемента управления ListView от объектов View упрощает переключение между множеством различных представлений в одном и том же списке. Именно такая технология применяется в проводнике Windows для получения различных представлений файлов и папок пользователя.
В состав WPF входит элемент представления - <GridView>, который удобно использовать для построения списков с множеством столбцов. Определяются эти столбцы путём добавления в коллекцию <GridViewColumn>.
<GridView> и <GridViewColumn> содержат набор свойств, которые разработчик может использовать для настройки внешнего вида списка, самый простой из них Header.
Свойство <GridViewColumn. CellTemplate> принимает шаблон данных, который применяется к конкретному столбцу:
<GridViewColumn. CellTemplate>
<DataTemplate>
<TextBox Name="ID" Text="{Binding Path=ID, Mode=TwoWay}" />
</DataTemplate>
</GridViewColumn. CellTemplate>
Заключительным моментом рассмотрения действий Шаг 8 является привязка.
Привязка данных - это отношение, которое сообщает WPF о необходимости извлечения некоторой информации из исходного свойства и использования его для установки свойства в целевом объекте. Целевое свойство - всегда свойство зависимости. Конечной целью привязки данных WPF является отображение некоторой информации в пользовательском интерфейсе.
Выражения привязки данных используют расширение разметки XAML, которое помещается в фигурные скобки, вначале указывается слово Binding, не смотря на то, что Binding может быть сконфигурирован различными способами, в примере устанавливаются только два свойства: имя элемента (Text), которое указывает исходный элемент, и Path, указывающее свойство в исходном элементе.
Свойство Mode, определяющее режим привязки, может принимать одно из пяти значений:
- OneWay - целевое свойство обновляется при изменениях исходного свойства;
- TwoWay - целевое свойство обновляется при изменениях исходного свойства, а исходное свойство обновляется при изменении целевого свойства;
- OneTime - целевое свойство устанавливается изначально на основе значения исходного свойства, однако с этого момента изменения игнорируются;
- OneWayToSource - аналогичен режиму OneWay, но действует в обратном направлении, исходное свойство обновляется, когда изменяется целевое свойство (что может показаться несколько странным), но целевое свойство никогда не обновляется;
- Default - этот режим привязки зависит от целевого свойства, это либо TwoWay (для устанавливаемых пользователем свойств, таких как TextBox. Text), либо OneWay (для всего остального).
Все привязки используют режим Default, если только не указано иное.
Шаг 9. С помощью страницы Page3.xaml будет проиллюстрирован механизм передачи данных между страницами WPF с помощью ссылок.
Действие 1. Заменить XAML-описание файла Page3.xaml на код разметки, приведённый ниже.
Листинг Page3.xaml
<Page x:Class="WpfApplication1.Page3"
xmlns="http://schemas. microsoft. com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas. /winfx/2006/xaml"
xmlns:mc="http://schemas. openxmlformats. org/markup-compatibility/2006"
xmlns:d="http://schemas. /expression/blend/2008"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
Title="Page3" Loaded="Page_Loaded">
<StackPanel>
<TextBlock TextAlignment="Center" FontSize="24">
Страница 3</TextBlock>
<TextBlock Margin="5">
Принято сообщение от стартовой страницы</TextBlock>
<Label Name ="nameLabel"></Label>
<TextBlock Margin="20">
</TextBlock>
</StackPanel>
</Page>
Элемент <Label> с именем nameLabel будет принимать текстовую строку от стартовой страницы.
Действие 2. С помощью контекстного меню добавить метод обработки события Loaded="Page_Loaded" и модифицировать программный код файла Page3.xaml. cs в соответствии со следующим кодом.
Листинг Page3.xaml. cs
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Windows;
using System. Windows. Controls;
using System. Windows. Data;
using System. Windows. Documents;
using System. Windows. Input;
using System. Windows. Media;
using System. Windows. Media. Imaging;
using System. Windows. Navigation;
using System. Windows. Shapes;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Page3.xaml
/// </summary>
public partial class Page3 : Page
{
public Page3()
{
InitializeComponent();
}
// Для того, чтобы принять данные от стартовой страницы
string mymessage;
public string MyMessage
{
set { mymessage = value; }
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
nameLabel. Content = mymessage;
}
}
}
Действие 3. Добавить в метод LinkClicked() файла Page1.xaml. cs содержимое:
private void LinkClicked(object sender, RoutedEventArgs e)
{
Page3 page3 = new Page3();
page3.MyMessage = tbMessage. Text;
this. NavigationService. Navigate(page3);
}
Действие 4. Запустить проект на выполнение. Рисунок 3.18 иллюстрирует результат навигации по страницам спроектированного приложения.

Рисунок 3.18
Следует обратить внимание на особенность передачи данных с первой страницы на третью. Данные передаются только по щелчку на ссылке. По щелчку на кнопке навигации свежая информация из текстового поля не передаётся, потому что берётся из журнала истории.
В 3.3.2 был рассмотрен пример создания простого многостраничного приложения с помощью элементов <Page>.
3.3.3 Пример создания многостраничного окна с корневым узлом, реализованным с помощью класса NavigationWindow.
Класс NavigationWindow добавляет стандартный интерфейс навигации и всю необходимую инфраструктуру, имеет доступ к тем же самым средствам уровня приложения, что и Window.
Шаг 1. Создать новый проект типа WPF Application.
Шаг 2. Удалить из состава проекта автоматически созданный мастером файл MainWindow. xaml и добавить к проекту вместо него новый файл с именем PageWindow. xaml по тому же оконному шаблону, как иллюстрирует рисунок 3.19.
Шаг 3. Открыть файл App. xaml и изменить атрибут StartupUri, как указано в листинге.
Листинг App. xaml
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas. /winfx/2006/xaml/presentation"
xmlns:x="http://schemas. /winfx/2006/xaml"
StartupUri="PageWindow. xaml">
<Application. Resources>
</Application. Resources>
</Application>

Рисунок 3.19
Шаг 4. Запустить проект на выполнение. Образ окна приведён на рисунке 3.20. Это обычное окно Windows, чтобы изменить его функциональность необходимо изменить класс, свойства которого наследует PageWindow.

Рисунок 3.20
Шаг 5. Открыть файл PageWindow. xaml и заменить его дескрипторный код новым кодом:
<NavigationWindow x:Class="WpfApplication1.PageWindow" xmlns="http://schemas. /winfx/2006/xaml/presentation"
xmlns:x="http://schemas. /winfx/2006/xaml"
Title="PageWindow" Height="300" Width="300"
WindowStartupLocation="CenterScreen">
</NavigationWindow>
Теперь класс PageWindow будет наследовать свойства класса NavigationWindow.
Шаг 6. Открыть файл PageWindow. xaml. cs и откорректировать его следующим образом:
Листинг PageWindow. xaml. cs
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Windows;
using System. Windows. Controls;
using System. Windows. Data;
using System. Windows. Documents;
using System. Windows. Input;
using System. Windows. Media;
using System. Windows. Media. Imaging;
using System. Windows. Shapes;
// Добавить необходимое пространство имён
using System. Windows. Navigation;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for PageWindow. xaml
/// </summary>
// Изменить тип на NavigationWindow
public partial class PageWindow : NavigationWindow
{
public PageWindow()
{
InitializeComponent();
}
}
}
Шаг 7. Запустить проект на выполнение. Теперь окно появится в виде пустого контейнера с заготовкой навигационного узла, как иллюстрирует рисунок 3.21.
Шаг 8. Содержимое навигационного узла должно быть представлено классом, производным от библиотечного класса Page.
Созданные страницы содержимого подключаются к навигационному узлу с помощью метода Navigate().
Добавить к проекту новый элемент Page с именем Page1.xaml.

Рисунок 3.21
Шаг 9. Отредактировать дескрипторную часть файла Page1.xaml следующим образом:
<Page x:Class="WpfApplication1.Page1"
xmlns="http://schemas. /winfx/2006/xaml/presentation"
xmlns:x="http://schemas. /winfx/2006/xaml"
xmlns:mc="http://schemas. openxmlformats. org/markup-compatibility/2006"
xmlns:d="http://schemas. /expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" >
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Основные порталы (построено редакторами)
