Хороший способ взглянуть на это может начаться с вопроса, что именно представляет собой Winforms.
И Winforms, и WPF - это фреймворки, разработанные для упрощения кодирования уровня пользовательского интерфейса приложения. Здесь действительно старые люди могут говорить о том, как написание Windows-версии «Hello, World» может занять около 4 страниц кода. Кроме того, камни были намного мягче, и нам пришлось сражаться с гигантскими ящерицами, пока мы кодировали. Библиотека и конструктор Winforms выполняет много общих задач и облегчает их написание.
WPF делает то же самое, но с учетом того, что эти общие задачи теперь могут включать в себя гораздо больше визуально интересных вещей, в дополнение к тому, что многие вещи, которые Winforms не обязательно считают частью уровня пользовательского интерфейса. Способ, которым WPF поддерживает командование, триггеры и привязку данных, - все это отличные части фреймворка, но основной причиной этого является та же основная причина, по которой Winforms изначально существовали.
Улучшение WPF заключается в том, что вместо того, чтобы дать вам возможность написать полностью настраиваемый элемент управления с нуля или заставить использовать один набор элементов управления с ограниченными возможностями настройки, теперь вы можете отделить функцию элемента управления от его элемента управления. внешний вид. Возможность описать, как наши элементы управления выглядят в XAML и отделить их от работы элементов управления в коде, очень похожа на модель HTML / Code, с которой привыкли работать веб-программисты.
Хорошее приложение WPF следует той же модели, что и хорошее приложение Winforms; хранение как можно большего количества материала за пределами пользовательского интерфейса. Основная логика приложения и уровня данных должна быть одинаковой, но теперь есть более простые способы сделать визуальные эффекты более впечатляющими, поэтому, вероятно, большая часть информации, которую вы видели на ней, включает более яркие визуальные элементы. Если вы хотите изучать WPF, вы можете начать использовать его почти точно так же, как вы бы использовали Winforms, а затем рефакторинг других функций по мере их понимания. Для отличного примера я настоятельно рекомендую серию постов Скотта Хансельмана о разработке BabySmash, , которые начинаются здесь . Это отличное прохождение процесса, как в коде, так и в мышлении.