Главная » Разработка для Windows Phone 7 » Панель, взгляд изнутри Windows Phone 7

0

Панели полностью описываются в коде без участия XAML. При создании производного от Panel класса обычно описывают несколько свойств, чтобы сделать панель более гибкой. Поскольку практически всегда эти свойства являются свойствами-зависимостями, давайте дождемся главы 11, в которой будет рассмотрено, как создавать панели с собственными свойствами.

Кроме определения пользовательских свойств, каждая панель всегда перегружает два метода, MeasureOverride (Перегрузка метода измерить) и ArrangeOverride (Перегрузка метода скомпоновать), которые соответствуют двум проходам компоновки. За первый проход каждый родительский элемент определяет размеры своих дочерних элементов; во втором проходе родительский элемент компонует дочерние элементы относительно себя.

Для реализации обеих задач панель выполняет доступ к свойству Children, унаследованному от Panel. (Свойство Children типа UIElementCollection (Коллекция элементов UI), но вы не можете самостоятельно создать экземпляр UIElementCollection, а этот объект выполняет некоторые особые операции в фоновом режиме, о чем вы даже не догадываетесь. Поэтому собственный подобный Panel класс без наследования от Panel создать невозможно. Если требуется элемент, который может размещать в себе множество дочерних элементов с достаточной гибкостью, он должен быть унаследован от Panel.)

Тайной окутано то, кто придумал такие имена – MeasureOverride и ArrangeOverride – для защищенных виртуальных методов? Почему ключевое слово C# override входит в состав имени метода?

Мне это не известно. Эти имена появились в Windows Presentation Foundation и указывают на разницу между классами UIElement и FrameworkElement. UIElement реализовывает сравнительно простую систему компоновки и для ее поддержки у него есть два метода: Measure (Измерить) и Arrange (Скомпоновать). Эти методы по-прежнему играют очень важную роль в компоновке (как мы увидим далее), но FrameworkElement понадобилось добавить в компоновку некоторые более сложные аспекты, а именно HorizontalAlignment, VerticalAlignment и Margin. Эти аспекты довольно сильно запутали систему компоновки, поэтому FrameworkElement ввел два новых метода – MeasureOverride и ArrangeOverride – которые заменили методы Measure и Arrange класса UIElement.

MeasureOverride и ArrangeOverride являются защищенными виртуальными методами. Measure и Arrange – открытые запечатанные методы. Пользовательская панель перегружает MeasureOverride и ArrangeOverride. В MeasureOverride панель вызывает Measure всех своих дочерних элементов; в ArrangeOverride панель вызывает Arrange всех своих дочерних элементов. Затем эти методы Measure и Arrange в каждом дочернем элементе вызывают его методы MeasureOverride и ArrangeOverride, продолжая тем самым этот процесс вниз по дереву визуальных элементов.

Панели нет необходимости беспокоиться о следующих свойствах, которые могут быть заданы для нее или ее дочерних элементов:

•                                  HorizontalAlignment и VerticalAlignment

•                                  Margin

•                                  Visibility

•                                  Opacity (не оказывает никакого влияния на компоновку)

•                                  RenderTransform (не оказывает никакого влияния на компоновку)

•         Height, MinHeight и MaxHeight

•         Width, MinWidth и MaxWidth

Все эти свойства обрабатываются автоматически.

Источник: Чарльз Петзольд, Программируем Windows Phone 7, Microsoft Press, © 2011.

По теме:

  • Комментарии