2010-03-10 12 views
2

Я работаю над пользовательским интерфейсом проекта WPF. Моя любимая ссылка во время xaml'ing (помимо stackoverflow :)) на данный момент - это «Windows Presentation Foundation Unleashed» Адама Натана. Он дает следующий совет относительно шаблонов управления: «Вместо использования ContentControl внутри шаблона управления вы должны использовать элемент ContentPresenter с более легким весом».Элементы с более легким весом - как измерить/узнать вес элемента?

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

Вопрос (как наивно!) Заключается в следующем: как узнать, что такое относительные «веса» разных элементов? Есть очевидные вещи, такие как RichTextBox и TextBox. Но как я могу выяснить, например, является ли StackPanel лучше, чем Grid, в ситуации, когда либо можно выполнить эту работу?

Является ли визуальное дерево элемента/управления хорошим индикатором «веса»? На что еще я могу смотреть?

Заранее спасибо.

ответ

2

Когда дело доходит до таких вещей, как ContentPresenter и ContentControl, вы можете проверить иерархию наследования: ContentPresenter происходит из FrameworkElement, а ContentControl - из Control.

Что касается панелей, то в основном Grid имеет самую сложную логику компоновки (именно поэтому она является наиболее гибкой), поэтому, как правило, любая другая панель будет лучше, если она сможет выполнить свою работу. Если вы хотите конкретное руководство по сложности панели, я бы перечислить их в следующем порядке от наименее до наиболее сложных:

  1. UniformGrid - размер ребенка даже не используется для расчета степени третейской группы
  2. StackPanel - только один аспект размера ребенка используется
  3. WrapPanel - Подобно StackPanel, но немного более сложным, как самый широкий элемент столбца/строки должны помнить.
  4. DockPanel - Поскольку только один элемент может занимать все оставшееся пространство, я бы сказал, что он меньше веса, чем сетка.
  5. Сетка - Самый гибкий и, следовательно, самый сложный алгоритм компоновки.
+0

Hi Abe Во-первых, спасибо. Из вашего ответа: «... вы можете проверить иерархию наследования: ContentPresenter происходит из FrameworkElement, а ContentControl - из Control». Итак, что-то, что происходит от элемента управления, всегда будет «тяжелее», чем что-то, что происходит от say FrameworkElement.Panel, потому что у Controls есть шаблоны управления, которые включают в себя загрузку функциональности? И: «Сетка - самый гибкий, и поэтому имеет самый сложный алгоритм компоновки». i.e гибкость обычно является хорошим показателем веса. (Я здесь вслушиваюсь, так что поправьте меня, если я ошибаюсь!) – cfouche

+0

Да, я согласен со всеми вашими разъяснениями. Я бы сказал, что шаблоны Controls на самом деле делают их более тяжелыми.Поскольку вы можете переопределить визуальное дерево элемента управления как глобальный стиль, как автор управления, вы бы не представляли, сколько визуальных эффектов вы бы добавили ... –

 Смежные вопросы

  • Нет связанных вопросов^_^