UIElement против FrameworkElement в WPF / Silverlight - PullRequest
13 голосов
/ 11 мая 2011

Когда я наследую от UIElement и FrameworkElement, учитывая, что FrameworkElement наследует UIElement. Кто-нибудь может привести примеры из жизни?

Ответы [ 2 ]

22 голосов
/ 06 сентября 2011

Это хорошая страница для изучения архитектуры WPF , и этот ответ относится только к WPF.Проверьте разделы UIElement и FrameworkElement, а также остальные, если у вас есть время.Вот цитата из связанной страницы, объясняющая, почему существуют 2 уровня:

К этому моменту в теме «основные» функции WPF - функции, реализованные в сборке PresentationCore, были в центре внимания.При создании WPF желаемым результатом было четкое разделение между основополагающими частями (такими как контракт на компоновку с Measure и Arrange) и частями структуры (например, реализация определенной компоновки, такой как Grid).Цель состояла в том, чтобы обеспечить низкую точку расширения в стеке, которая позволила бы внешним разработчикам создавать свои собственные платформы при необходимости.

Короче говоря, UIElement s знают, как рисовать себя (потому что онипроисходит от Visual).Они также могут использовать систему событий с маршрутизацией , предоставляя виртуальные методы, такие как OnPreviewMouseDown и OnMouseDown, и часть системы , реализуя Measure и Arrange.

FrameworkElement s расширяют систему компоновки за счет реализации некоторых виртуальных методов, определенных в UIElement.Они обеспечивают согласованный способ установки свойств макета, например, свойства Margin и свойства MinWidth.Кроме того, их можно стилизовать, и они могут принять участие в привязке данных .

В ответ на ваш вопрос, если вам нужны какие-либо дополнительные способности, которые FrameworkElement добавляют, например, выНужны стили, привязка или система разметки, которая проще в использовании, а затем наследуйте их.В противном случае получайте из UIElement, поскольку использование FrameworkElement приводит к небольшим накладным расходам.

Кроме того, вы должны взглянуть на класс Control (производный от FrameworkElement), поскольку он предоставляет полезные новые уровни функциональности, такие как Templating , и свойства, такие как Padding.

Знакомство с иерархией наследования также является хорошей идеей, возможно, вы захотите извлечь из нее другие классы (хотя, вероятно, не выше, чем Visual).

0 голосов
/ 25 августа 2011

У меня сейчас нет примеров, но я могу отослать вас по ссылкам, которые могут помочь.

UIElement - это базовый класс для большинства объектов, которые имеют визуальный внешний вид и могут обрабатывать основной ввод в Silverlight.

FrameworkElement предоставляет структуру общих API для объектов, участвующих в макете Silverlight. FrameworkElement также определяет API-интерфейсы, связанные с привязкой данных, деревом объектов и функциональными областями времени жизни объекта в Silverlight.

Итак, какие дополнительные возможности вы получаете? Смотри http://forums.silverlight.net/p/205863/482651.aspx

...