Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемАндрей Чиркунов
1 Классы Windows Presentation Foundation System.Object DispatcherObject ApplicationDependencyObject Visual UIElement FrameworkElement Page Shape TextBlock Control ContentControl Frame Window NavigationWindow ButtonBase Button RepeatButton ToggleButton CheckBoxRadioButton RangeBase Slider ProgressBar TextBoxBase TextBox RichTextBox ItemsControl MenuBase MenuContextMenu HeaderedItemsControl MenuItemToolbar TreeViewItem Selector TabControl ListBox ListView ComboBox TreeView ToolBarTray Panel GridCanvas ContentElement FrameworkContentElement FrameworkTemplateStyle NavigationService
2 Типы приложений WPF Windows Presentation Foundation (WPF) поддерживает четыре типа приложений: Standalone Applications - традиционные Windows-приложения, представляющие собой исполняемую сборку, которая устанавливается и выполняется на клиентской машине. XAML browser applications (XBAPs) - приложения, состоящие из страниц с возможностью навигации, скомпилированные в исполняемые сборки, которые выполняются в Windows Internet Explorer. Custom Control Libraries - сборки(non-executable) с повторно используемыми элементами управления. Class Libraries – сборки (non-executable) с повторно используемыми классами.
3 Навигация в WPF WPF поддерживает встроенную модель навигации в стиле Web с использованием страниц (класс Page) и гиперссылок (класс Hyperlink) с уже готовыми средствами навигации. WPF имеет два класса-навигатора NavigationWindow и Frame. Обработку запросов навигации и управление временем жизни навигаторов выполняет служба навигации, реализованная в классе NavigationService. Служба навигации сохраняет хронологию навигации в двух списках – с обратной историей навигации (back navigation history) и прямой историей навигации (forward navigation history). Класс Frame может поддерживать как свою собственную историю навигации, так и использовать историю навигатора, который является для него хостом. Object DispatcherObgect DependencyObject Visual UIElement FrameworkElement Page PageFunctionBase PageFunction Control ContentControl FrameWindow NavigationWindow NavigationService
4 Хронология навигации При каждом переходе на новую страницу добавляется вход в обратную историю навигации. При переходе на предыдущую страницу по кнопке возврата информация о текущей странице добавляется в список прямой истории навигации. Если после возврата на предыдущую страницу выполняется переход к новой странице, список следующих страниц очищается. По умолчанию служба навигации не сохраняет в навигационной истории экземпляр содержимого, при переходе каждый раз создается новый объект. При большом числе переходов это позволяет сэкономить память, но при этом теряется состояние объектов навигации. WPF поддерживает несколько способов сохранения состояния объектов навигации. Визуально XBAPs используют как навигатор Internet Explorer 7, но в реальности навигатором XBAPs является NavigationWindow. История навигации, которая поддерживается NavigationWindow, интегрируется с историей навигации, которая управляется Internet Explorer 7.
5 Класс Page страницы легко определять и повторно использовать; класс имеет доступ к службе навигации - объекту NavigationService ; через свойства класса Page (WindowTitle, WindowWidth, WindowHeight, ShowsNavigationUI) можно изменить заголовок, размеры и UI навигации окна –хоста (host window) ; имеют поддержку дизайнера в Microsoft Visual Studio. FrameworkElement Page PageFunctionBase PageFunction(T) Класс Page инкапсулирует страницу содержимого (page of content), которую можно разместить в навигаторе - Windows Internet Explorer, NavigationWindow или Frame. Для определения страниц можно использовать как разметку, так и разметку и код одновременно или только код. Использование страниц (объектов класса Page) дает следующие преимущества перед другими способами размещения содержимого для навигации:
6 Свойства класса Page Класс Page имеет только один открытый конструктор - без параметров. Содержимое (content ) передается странице через свойство дают возможность изменять размеры и заголовок окна-хоста ( Window, NavigationWindow и Windows Internet Explorer). Если как окно-хост используется Frame, все эти свойства можно использовать только для чтения. По умолчанию как заголовок (title) окна, которое является хостом для страницы, используется имя файла, который содержит страницу. public Object Content { get; set; } public double WindowHeight { get; set; } public double WindowWidth { get; set; } public string WindowTitle { get; set; } Класс Page может иметь только один дочерний элемент (content), обычно это один из контейнеров (Grid, StackPanel,…). Свойства класса Page
7 Окно-хост для страницы Окном-хостом для страницы может быть объект класса Window, NavigationWindow, Frame, UserControl или браузер. Указать окно-хост для страницы можно одним из способов: cсылку на объект класса Page присвоить свойству Content классов Window, NavigationWindow или Frame ; свойству Source классов NavigationWindow или Frame присвоить URI страницы; указать как StartupUri в приложении; указать как StartupUri в XBAP. В процессе навигации переход на другие страницы выполняется декларативно с использованием гиперссылок (Hyperlink); программно с помощью методов класса NavigationService; с помощью встроенных элементов управления в навигаторах.
8 Сохранение состояния страниц при навигации При переходе на другую страницу объект-страница в памяти уничтожается, но предварительно с помощью сериализации сохраняется информация о состоянии некоторых элементов управления. При возвращении на страницу WPF создает страницу заново из исходного XAML файла и восстанавливает состояние сохраненных элементов управления. Для элементов управления на странице сохраняются значения только тех свойств зависимостей, у которых при регистрации был установлен флаг журнала, указывающий что они должны помещаться в журнал навигации. Например, флаг журнала имеет значение true для свойства Text элемента TextBox, но равен false для свойства Text элемента TextBlock. Если страница создается динамически, то у WPF нет ссылки на XAML файл для страницы и объект страницы всегда будет сохраняться в памяти.
9 Как сохранить состояние страницы при навигации? Чтобы сохранить введенные данные при переходе на другие страницы, можно использовать один из способов: Присвоить значение true свойству KeepAlive класса Page. Реализовать свою логику сохранения данных со страницы, например, для полей данных на странице определить свойства зависимостей и при регистрации присвоить значение true флагу журнала. Использовать страничные функции и передавать необходимую информацию от страницы к странице через параметры и возвращаемые значения.
10 Свойство KeepAlive класса Page При переходе на другую страницу (в любом направлении) для страницы создается вход в истории навигации, но по умолчанию сохраняется только Pack URI для страницы, объект Page не сохраняется. При возвращении на страницу для нее создается новый объект на основе сохраненного Pack URI. Если значение свойства KeepAlive установлено в true, страница будет сохраняться в памяти в текущем состоянии. При переходах на эту страницу событие Initialized не инициируется, но события Loaded и Unloaded происходят каждый раз. По умолчанию значение свойства равно false. Этот способ значительно увеличивает накладные расходы, связанные с памятью. Следует избегать использования значения true для свойства KeepAlive за исключением случая, когда на страницу выполняется много переходов, а содержимое страницы требует много времени для инициализации. public bool KeepAlive { get; set; }
11 Класс NavigationService Класс NavigationService выполняет обработку запросов навигации и управляет временем жизни навигаторов. Ссылку на NavigationService из классов-навигаторов можно получить как возвращаемое значение метода GetNavigationService, определенного в классах NavigationWindow и Frame; через свойство NavigationService классов Page и Frame; Класс содержит методы, свойства и события для поддержки навигации. Класс NavigationService инкапсулирует средства для загрузки содержимого (content) в контекст навигатора. В качестве содержимого можно использовать любые объекты.NET Framework и HTML файлы, но использование объектов типа Page имеет преимущества в WPF навигации. Содержимое (content) можно указать одним из двух способов явно, присвоив свойству Content класса ссылку на объект с содержимым; неявно при вызовах методов Navigate, GoBack или GoForward. Навигация выполняется асинхронно, поэтому свойство Content может не сразу возвращать корректную ссылку.
12 Метод Navigate класса NavigationService Для навигации по содержимому можно вызвать одну из перегруженных версий метода Navigate, передав через параметры ссылку на объект, для которого выполняется навигация, и ссылку на дополнительный объект с данными. public bool Navigate( Object root ); public bool Navigate( Object root, Object navigationState ); Класс имеет перегруженные версии метода Navigate, идентифицирующие объект навигации по абсолютному или относительному URI, который должен содержать корректный Web URL или Pack URI. public bool Navigate( Uri source ); public bool Navigate( Uri source, Object navigationState ); public bool Navigate( Uri source, Object navigationState, bool sandboxExternalContent ); Если значение параметра source равно null, существующее до вызова метода содержимое ( свойство Content) будет очищено. При загрузке Web-содержимого может быть брошено Web-исключение, например, File Not Found. Эти исключения можно обработать в событии NavigationFailed.
13 Свойства класса NavigationService Служба навигации предоставляет информацию об объектах навигации через свойства класса NavigationService: public Object Content { get; set; } Ссылка на текущее содержимое (content). public Uri Source { get; set; } Объект класса Uri с URI для текущего содержимого. Когда свойству присваивается новое значение, навигатор (NavigationWindow или Frame) переходит по указанному URI.Допускается значение null. public Uri CurrentSource { get; } Uri для последнего содержимого навигации (если использовался URI), null в противном случае. Значение свойства CurrentSource не изменяется до тех пор, пока переход к другому URI не будет успешно завершен. public bool CanGoForward { get; } Проверяет, есть ли хотя бы один вход в прямой истории навигации. public bool CanGoBack { get; } Проверяет, есть ли хотя бы один вход в обратной истории навигации.
14 Методы класса NavigationService public void GoForward(); Переход к последнему входу в прямой истории навигации. Бросает исключение, если в прямой истории навигации нет ни одного входа. public void GoBack(); Переход к последнему входу в обратной истории навигации. Бросает исключение, если в обратной истории навигации нет ни одного входа. public JournalEntry RemoveBackEntry(); Удаляет последний вход из обратной истории навигации. public void Refresh(); Инициирует новую загрузку текущей страницы. При переходе к текущему объекту навигации (вызовом Navigate или Refresh), новый вход в историю навигации не добавляется.
15 Событие Navigating При новом запросе на выполнение навигации событие Navigating происходит первым, еще до того, как будет запрошен источник содержимого( source content). Объект NavigatingCancelEventArgs, доступ к которому можно получить через параметры обработчика, содержит информацию о запросе. При обработке этого события можно изменить параметры навигации перед завершением навигации. В частности, при обработке этого события еще можно отказаться от навигации, присвоив значение true свойству Cancel. В этом случае другие события навигации не произойдут. Отказаться от навигации нельзя, если хостом приложения является браузер. Если событие Navigating происходит в NavigationService, то оно происходит и в объекте Application. Обработчик события Navigating получает через свойства объекта NavigatingCancelEventArgs детальную информацию о событии.
16 Структурная навигация При навигации обмен данными между страницами можно организовать путем вызова метода, через параметр которого можно передать данные вызывающей странице. По аналогии со структурным программированием такой способ организации навигации получил название структурная навигация (structured navigation). Для структурной навигации определен специальный обобщенный класс, который используется как базовый для типа вызываемой страницы. public class PageFunction : PageFunctionBase Обобщенный параметр T определяет тип объекта, который служба навигации передает вызывающей странице.
17 Обмен данными при структурной навигации В классе PageFunction определен защищенный метод, Вызывающая страница получает ссылку на объект ReturnEventArgs в обработчике события Return. По умолчанию при вызове OnReturn(.) вызванная страница удаляется из истории навигации. Конструкторы и свойства класса ReturnEventArgs : protected virtual void OnReturn( ReturnEventArgs e ); для возврата на вызывающую страницу. Через его параметр ReturnEventArgs можно передать информацию на вызывающую страницу. При вызове метода OnReturn(.) служба навигации бросает событие Return, которое может обработать только вызывающая страница. public event ReturnEventHandler Return; public ReturnEventArgs(); Конструктор без параметров. public ReturnEventArgs (T result ); Конструктор, инициализирующий свойство Result –возвращаемое значение. public T Result { get; set; } Значение, которое возвращает страничная функция.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.