UIElement vs FrameworkElement в WPF/Silverlight

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

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

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