<StackPanel>
<TextBlock TextAlignment="Center" FontSize="24">Страница 1</TextBlock>
<TextBlock>
<Hyperlink Click="LinkClicked">На страницу 2</Hyperlink>
</TextBlock>
</StackPanel>
</Page>
Шаг 10. Добавить в файл Page1.xaml. cs код обработки события Click="LinkClicked".
Листинг Page1.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 Page1.xaml
/// </summary>
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
}
private void LinkClicked(object sender, RoutedEventArgs e)
{
this. NavigationService. Navigate(new Page2());
}
}
}
Шаг 11. Добавить к проекту новую страницу Page2. xaml.
Шаг 12. Отредактировать дескрипторную часть файла Page2.xaml следующим образом:
<Page x:Class="WpfApplication1.Page2"
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="Page2">
<StackPanel> <TextBlock TextAlignment="Center" FontSize="24"> Страница 2
</TextBlock></StackPanel></Page>
Шаг 13. Добавить в описание класса <NavigationWindow> атрибут Source="Page1.xaml", подключающий при запуске начальную страницу Page1.xaml.
Это действие можно реализовать и, добавив в кодовую часть класса PageWindow строку создания экземпляра:
public partial class PageWindow : NavigationWindow
{
public PageWindow()
{
InitializeComponent();
this. Navigate(new Page1());
}
}
Шаг 14. Запустить проект на выполнение, на экране появится окно с узлом ссылок, обеспечивающим переход на две пустые страницы (рисунок 3.22).

Рисунок 3.22
Каждая страница примера является автономной, даже если наполнить их элементами управления.
При переходе между страницами часто возникает необходимость передавать данные от одной страницы к другой странице, т. е. хранить их состояние. Чтобы это реализовать, должен быть общий почтовый ящик, не зависящий от существования страниц, в котором бы эти данные хранились.
В WPF для передачи данных между страницами можно использовать словарь (массив пар «ключ-значение») Application. Current. Properties или включать данные непосредственно в объект новой страницы.
3.3.4 Пример размещения страниц во фрейме.
Элемент <NavigationWindow> является удобным контейнером, но не единственным вариантом.
Страницы также можно размещать и непосредственно внутри других окон или даже внутри других страниц. Это подразумевает возможность создания чрезвычайно гибкой системы, поскольку означает, что одну и ту же страницу можно использовать многократно разными способами в зависимости от типа приложения, которое требуется создать.
Чтобы вставить страницу внутрь окна, нужно воспользоваться элементом <Frame>.
Класс Frame представляет собой элемент управления содержимым, который может удерживать любой элемент, но особенно полезен именно в качестве контейнера для страницы. Он включает свойство Source, которое указывает на отображаемую страницу XAML.
Шаг 1. Создать новый проект WPF Application.
Шаг 2. Изменить XAML-описание окна MainWindow. xaml на код, приведённый ниже.
Листинг MainWindow. xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas. /winfx/2006/xaml/presentation"
xmlns:x="http://schemas. /winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="5">
<Grid. ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid. ColumnDefinitions>
<StackPanel Grid. Column="0" VerticalAlignment="Stretch">
<TextBlock Margin="5" TextWrapping="Wrap" TextAlignment="Justify" Padding="5">
Чтобы вставить страницу внутрь окна, нужно воспользоваться классом Frame.
Класс Frame представляет собой элемент управления содержимым, который может удерживать любой элемент, но особенно полезен именно в качестве контейнера для страницы. Он включает свойство Source, которое указывает на отображаемую страницу XAML.
</TextBlock>
<Button Margin="5" Padding="5" Grid. Column="0" VerticalAlignment="Bottom">Close</Button>
</StackPanel>
<Frame Grid. Column="1" Source="Page1.xaml" BorderBrush="Blue" BorderThickness="2">
</Frame>
</Grid>
</Window>
На рисунке 3.23 приведено полотно конструктора после изменения дескрипторной части файла MainWindow. xaml.
Граница вокруг фрейма (элемент <Frame>) отображает содержимое страницы. Можно создать окно с множеством фреймов и указать им всем на разные страницы.
Появление кнопок навигации связано с установкой свойства Frame. NavigationUIVisibility, если по умолчанию установлено значение "Automatic", то навигационные кнопки появляются только тогда, когда в списке посещений уже присутствуют какие-то страницы.
Если Frame. NavigationUIVisibility="Visible", то кнопки появляются сразу, при Frame. NavigationUIVisibility="Hidden" навигационные кнопки не будут отображаться никогда.

Рисунок 3.23
Шаг 3. Добавить к проекту две страницы Page1.xaml и Page2.xaml.
Шаг 4. Заменить XAML-описание страницы Page1.xaml следующим кодом.
Листинг 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" Title="Page1">
<Grid>
<Grid. RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid. RowDefinitions>
<TextBox Grid. Row="0" Grid. RowSpan="2" TextAlignment="Justify" Padding="5" TextWrapping="WrapWithOverflow" Height="Auto" >
На этапе проектирования приложения страницы являются самым высокоуровневым компонентом пользовательского интерфейса. Но во время выполнения приложения контейнером наивысшего уровня они уже не будут, они будут обслуживаться в другом контейнере, который владеет страницами и называется хостом.
</TextBox>
<TextBlock Grid. Row="1" VerticalAlignment="Bottom" Padding="10">
Переход
<Hyperlink NavigateUri="Page2.xaml">Страница 2</Hyperlink>
с помощью гиперссылки
</TextBlock>
</Grid>
</Page>
Шаг 5. Заменить XAML-описание страницы Page2.xaml следующим кодом.
Листинг Page2.xaml
<Page x:Class="WpfApplication1.Page2"
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="450" d:DesignWidth="350" Title="Page2">
<Grid>
<Grid. RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid. RowDefinitions>
<TextBox Grid. Row="0" Grid. RowSpan="2" TextAlignment="Justify" Padding="5" TextWrapping="WrapWithOverflow" Height="Auto">
Страницы также можно размещать и непосредственно внутри других окон или даже внутри других страниц.
Это подразумевает возможность создания чрезвычайно гибкой системы, поскольку означает, что одну и ту же страницу можно использовать многократно разными способами в зависимости от типа приложения, которое требуется создать. Чтобы вставить страницу внутрь окна, нужно воспользоваться классом Frame. Класс Frame представляет собой элемент управления содержимым, который может удерживать любой элемент, но особенно полезен именно в качестве контейнера для страницы. Он включает свойство Source, которое указывает на отображаемую страницу XAML.
</TextBox>
<TextBlock Grid. Row="1" VerticalAlignment="Bottom" Padding="10">
Переход
<Hyperlink NavigateUri="Page1.xaml">Страница 1</Hyperlink>
с помощью гиперссылки
</TextBlock>
</Grid>
</Page>
Шаг 6. Запустить проект на выполнение. Рисунок 3.24 иллюстрирует результаты навигации по страницам, размещённым в фрейме окна.

|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Основные порталы (построено редакторами)
