Главная » WPF » Свойства Children и Child

0

Некоторые элементы  управления поддерживают в качестве  содержимого  не произвольные объекты (как, скажем, Button и ListBox),  а только потомков клас# са UIElement. И это подводит нас к оставшимся двум разновидностям содержи# мого: Child и Children.

Прежде  чем переходить  к моделям  содержимого  элементов,  будет интересно немного поговорить  о типах элементов  управления. Часто приводят  высказыва# ние Джеффа  Богдана (Jeff Bogdan),  еще одного архитектора WPF:  «Приступая к факторизации, самое главное – знать, когда остановиться». Композиция элемен# тов – вещь замечательная, но в конце концов кто#то же должен выполнить содер# жательную работу. В WPF большая часть элементов  управления относится  к од# ной из трех категорий: составной  элемент, менеджер  размещения и элемент#ри# совальщик.

Составной элемент  (content control), например  ListBox и Button, сам ничего не делает; он составлен из других элементов, которые и выполняют  реальную ра# боту. Например, в дереве отображения кнопки  Button (рис.  3.3) мы видим, что визуализацией кнопки занимаются элементы ButtonChrome и Content#Presenter.

С другой стороны, менеджеры размещения (layout control) отвечают за пози# ционирование других  элементов  управления. Выше мы уже встречались с эле# ментом такого вида: StackPanel. Вообще говоря, сами менеджеры размещения не# видимы, мы наблюдаем лишь их воздействие на другие элементы.  Большинство элементов, поддерживающих модель множественного содержимого, – это как раз менеджеры  размещения. Все панели, кроме FlowDocumentViewer2, реализуют модель множественного содержимого, наследуя классу Panel:

public class Panel : FrameworkElement {

public UIElementCollection Children { get; }

}

Рисовальщики (render controls) – это элементы,  которые рисуют пиксели  на экране.  В качестве  примеров  можно  привести  элементы  Rectangle  и Ellipse.  А самым лучшим примером, пожалуй,  будет класс Border. Он рисует рамку вокруг переданного ему единственного элемента:

public class Border : Decorator {

public UIElement Child { get; set; }

}

Модель содержимого  помогает решить проблему вывода развитого содержимого при сохранении простой модели программирования. Еще один сложный вопрос, воз# никающий  при написании элементов  управления, – как нарисовать  то, что не явля# ется содержимым? Например, как внутри кнопки появляется объект ButtonChrome?

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

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