Это хорошая страница для изучения архитектуры 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
).