1 / 20

Классы Windows Presentation Foundation

Классы Windows Presentation Foundation. Типы приложений WPF. Windows Presentation Foundation (WPF)  поддерживает четыре типа приложений :

cole-lynch
Download Presentation

Классы Windows Presentation Foundation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Классы Windows Presentation Foundation

  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может поддерживать как свою собственную историю навигации, так и использовать историю навигатора, который является для него хостом.

  4. Хронология навигации • При каждом переходе на новую страницу добавляется вход в обратную историю навигации. • При переходе на предыдущую страницу по кнопке возврата информация о текущей странице добавляется в список прямой истории навигации . • Если после возврата на предыдущую страницу выполняется переход к новой странице, список следующих страниц очищается. • По умолчанию служба навигации не сохраняет в навигационной истории экземпляр содержимого, при переходе каждый раз создается новый объект. При большом числе переходов это позволяет сэкономить память, но при этом теряется состояние объектов навигации. • WPF поддерживает несколько способов сохранения состояния объектов навигации. • Визуально XBAPs используют как навигатор Internet Explorer, но в реальности навигатором XBAPs является NavigationWindow. История навигации, которая поддерживается NavigationWindow, интегрируется с историей навигации, которая управляется Internet Explorer.

  5. Класс Page • Класс Page инкапсулирует страницу содержимого (page of content), которую можно разместить в навигаторе - Windows Internet Explorer, NavigationWindow илиFrame. • Для определения страниц можно использовать как разметку, так и разметку и код одновременно или только код. • Использование страниц (объектов класса Page) дает следующие преимущества перед другими способами размещения содержимого для навигации: • страницы легко определятьи повторно использовать; • класс имеет доступ к службе навигации - объектуNavigationService; • через свойства класса Page (WindowTitle, WindowWidth, WindowHeight, ShowsNavigationUI) можно изменить заголовок, размеры и UI навигацииокна –хоста (host window); • имеют поддержку дизайнера в Microsoft Visual Studio.

  6. Свойства класса Page • Класс Pageимеет только один открытый конструктор - без параметров. • Содержимое (content )передается странице через свойство public Object Content { get; set; } • Класс Pageможет иметь только один дочерний элемент (content), обычно это один из контейнеров (Grid, StackPanel,…). • Свойства класса Page public double WindowHeight { get; set; } public double WindowWidth { get; set; } public string WindowTitle { get; set; } • дают возможность изменять размеры и заголовок окна-хоста ( Window, NavigationWindow и Windows Internet Explorer). • Если как окно-хостиспользуется Frame, все эти свойства можно использовать только для чтения. • По умолчанию как заголовок (title) окна, которое является хостом для страницы, используется имя файла, который содержит страницу.

  7. Окно-хост для страницы • Окном-хостом для страницы может быть объект классаWindow, NavigationWindow, Frame, UserControl или браузер. • Указать окно-хост для страницы можно одним из способов: • cсылку на объекткласса Page присвоить свойству Contentклассов Window, NavigationWindow или Frame; • свойству Sourceклассов NavigationWindowилиFrame присвоить URI страницы; • указать как StartupUri в приложении; • указать как StartupUri в XBAP. • В процессе навигации переход на другие страницы выполняется • декларативно с использованием гиперссылок(Hyperlink); • программно с помощью методов класса NavigationService; • с помощью встроенных элементов управления в навигаторах.

  8. URI (Универсальный идентификатор ресурса) • URI (universal resource identifier) – строка символов, кодирующая адрес информационного ресурса. Спецификации URI определены в интернет-стандартах RFC 2396 и RFC 3986. • Все элементы URI должны состоять только из символов базовой латиницы(символы из кодировок Unicode/ISO 10646). Чтобы включить в них другие символы, их необходимо преобразовать в формат UTF-8 и представить в виде %xx, где xx — шестнадцатеричный код байта. • Международный код ресурса IRI (international resource identifier) позволяет применять символы Юникода.Спецификации IRI определены в стандарте RFC 3987. • Класс Uri в .NET Framework версии 3.5, 3.0 с пакетом обновления 1 (SP1) и 2.0 с пакетом обновления 1 (SP1) поддерживает IRI в соответствии со стандартом RFC 3987. • Полный URI имеет вид • Протокол:// авторизация// путь к ресурсу на сервере ? запрос • Обязательным элементом полного URI является протокол, остальные элементы зависят от протокола. • Относительные URI могут использоваться, когда тем или иным способом определен базовый URI. Относительные URI ресурсов указываются относительно базового URI.

  9. Класс Uri • Класс Uriобеспечивает объектное представление универсального кода ресурсов (URI), а также простой доступ к его частям. • После создания объекта Uri его свойства доступны только для чтения. Создание объекта, который допускает изменение, поддерживает класс UriBuilder. • Конструкторы класса (5) создают экземпляры Uri на основе строки кода URI и/или на основе базовых и относительных Uri. public Uri( string uriString ); public Uri( Uri baseUri, string relativeUri ); • Конструкторы анализируют URI, выполняют преобразования в канонический формат и применяют необходимые escape-кодировки. Конструкторы бросают исключение UriFormatException, если входные данные заданы неправильно. • Конструкторы не проверяют, что объект Uri ссылается на доступный ресурс.

  10. Интерфейс IUriContext • Интерфейс IUriContext обеспечивает установку базового URI. public interface IUriContext { Uri BaseUri { get; set; } } • Один из конструкторов класса Uri public Uri( string uriString, UriKind uriKind ); позволяет указать, является ли строка URI относительным или абсолютным URI. Перечисление UriKind имеет значения Absolute, Relative и RelativeOrAbsolute.

  11. Сохранение состояния страниц при навигации • При переходе на другую страницу объект-страница в памяти уничтожается, но предварительно с помощью сериализации сохраняется информация о состоянии некоторых элементов управления. • При возвращении на страницу WPF создает страницу заново из исходного XAML файла и восстанавливает состояние сохраненных элементов управления. • Для элементов управления на странице сохраняются значения только тех свойств зависимостей, у которых при регистрации был установлен флаг журнала, указывающий что они должны помещаться в журнал навигации. Например, флаг журнала имеет значение true для свойства Textэлемента TextBox, но равенfalse для свойства Textэлемента TextBlock. • Если страница создается динамически, то у WPF нет ссылки на XAML файл для страницы и объект страницы всегда будет сохраняться в памяти.

  12. Как сохранить состояние страницы при навигации? • Чтобы сохранить введенные данные при переходе на другие страницы, можно использовать один из способов: • Присвоить значение true свойству KeepAliveкласса Page. • Реализовать свою логику сохранения данных со страницы, например, для полей данных на странице определить свойства зависимостей и при регистрации присвоить значение trueфлагу журнала. • Использовать страничные функции и передавать необходимую информацию от страницы к странице через параметры и возвращаемые значения.

  13. Свойство KeepAlive класса Page public boolKeepAlive { get; set; } • При переходе на другую страницу (в любом направлении) для страницы создается вход в истории навигации, но по умолчанию сохраняется только Pack URI для страницы, объект Pageне сохраняется. • При возвращении на страницу для нее создается новый объект на основе сохраненного Pack URI. • Если значение свойства KeepAliveустановлено в true, страница будет сохраняться в памяти в текущем состоянии. При переходах на эту страницу событие Initializedне инициируется, но события Loadedи Unloadedпроисходят каждый раз. По умолчанию значение свойства равноfalse. • Этот способ значительно увеличивает накладные расходы, связанные с памятью. Следует избегать использованиязначения trueдля свойства KeepAlive за исключением случая, когда на страницу выполняется много переходов, а содержимое страницы требует много времени для инициализации.

  14. Класс NavigationService • Класс NavigationServiceвыполняет обработку запросов навигации и управляет временем жизни навигаторов. • Ссылку на NavigationServiceиз классов-навигаторов можно получить • как возвращаемое значение метода GetNavigationService, определенного в классах NavigationWindowиFrame; • через свойство NavigationService классов Page и Frame; • Класс содержит методы, свойства и события для поддержки навигации. • Класс NavigationServiceинкапсулирует средства для загрузки содержимого (content) в контекст навигатора. • В качестве содержимого можно использовать любые объекты.NET Framework и HTML файлы, но использование объектов типа Pageимеет преимущества в WPF навигации. • Содержимое (content) можно указать одним из двух способов • явно, присвоив свойству Contentклассассылку на объект с содержимым; • неявно при вызовах методов Navigate, GoBack или GoForward. • Навигация выполняется асинхронно, поэтому свойство Content может не сразу возвращать корректную ссылку.

  15. Метод Navigate класса NavigationService • Для навигации по содержимому можно вызвать одну из перегруженных версий метода Navigate, передав через параметры ссылку на объект, для которого выполняется навигация, и ссылку на дополнительный объект с данными. public bool Navigate( Object root ); public bool Navigate( Object root, Object navigationState ); • Класс имеет перегруженные версии метода Navigate, идентифицирующие объект навигации по абсолютному или относительному URI, который должен содержать корректный Web URL или PackURI. public bool Navigate( Uri source ); public bool Navigate( Uri source, Object navigationState ); public bool Navigate( Uri source, Object navigationState, boolsandboxExternalContent ); • Если значение параметра source равно null, существующее до вызова метода содержимое ( свойство Content) будет очищено. • При загрузке Web-содержимогоможет быть брошено Web-исключение , например, File Not Found. Эти исключения можно обработать в событии NavigationFailed.

  16. Свойства класса NavigationService • Служба навигации предоставляет информацию об объектах навигации через свойства класса NavigationService:

  17. Методы класса NavigationService

  18. Событие Navigating • При новом запросе на выполнение навигации событие Navigatingпроисходит первым, еще до того, как будет запрошен источник содержимого( source content). • Объект NavigatingCancelEventArgs, доступ к которому можно получить через параметры обработчика, содержит информацию о запросе. • При обработке этого события можно изменить параметры навигации перед завершением навигации. • В частности, при обработке этого события еще можно отказаться от навигации, присвоив значение true свойству Cancel.В этом случае другие события навигации не произойдут. • Отказаться от навигации нельзя, если хостом приложения является браузер. • Если событие Navigatingпроисходит в NavigationService, то оно происходит и в объекте Application. • Обработчик события Navigatingполучает через свойства объекта NavigatingCancelEventArgs детальную информацию о событии.

  19. Структурная навигация • При навигации обмен данными между страницами можно организовать путем вызова метода, через параметр которого можно передать данные вызывающей странице. • По аналогии со структурным программированием такой способ организации навигации получил название структурная навигация (structured navigation). • Для структурной навигации определен специальный обобщенный класс, который используется как базовый для типа вызываемой страницы. public class PageFunction<T> : PageFunctionBase • Обобщенный параметр T определяет тип объекта, который служба навигации передает вызывающей странице .

  20. Обмен данными при структурной навигации • В классе PageFunction<T>определен защищенный метод, protected virtual void OnReturn( ReturnEventArgs<T> e ); • для возврата на вызывающую страницу. Через его параметр ReturnEventArgs<T>можно передать информацию на вызывающую страницу. • При вызове метода OnReturn(.) служба навигации бросает событие Return, которое может обработать только вызывающая страница. public event ReturnEventHandler<T> Return; • Вызывающая страница получает ссылку на объект ReturnEventArgs<T> в обработчике события Return. • По умолчанию при вызове OnReturn(.)вызванная страница удаляется из истории навигации. • Конструкторы и свойства класса ReturnEventArgs<T> :

More Related