← Все вопросы

Что такое WPF и чем он отличается от WinForms?

Задан 32 месяца назад1.3к просмотров2 ответа
11

Начинаю изучать десктоп-разработку на C#. Постоянно встречаю аббревиатуру WPF (Windows Presentation Foundation), но не понимаю, что это и почему все советуют его вместо WinForms. Можете объяснить простыми словами, что такое WPF и в чём ключевая разница?

2 ответа

16
✓ Принятый ответ — помог автору

WPF (Windows Presentation Foundation) — это технология/фреймворк от Microsoft для построения desktop-интерфейсов под Windows на платформе .NET. Появилась в 2006 году как более современная замена WinForms.

Главные отличия от WinForms:

WinForms WPF
Разметка UI код на C# декларативный XAML
Отрисовка GDI+ (пиксели) DirectX (вектор)
Масштабирование пиксельное, плывёт на HiDPI векторное, чёткое на любом DPI
Привязка данных примитивная мощный Binding + MVVM
Стилизация ограниченная стили, шаблоны, темы
Анимации вручную встроенные

Ключевая идея WPF — разделение интерфейса (XAML) и логики (C#). Дизайнер может рисовать в XAML, а программист писать код отдельно.

Минимальное окно на XAML выглядит так:

<Window x:Class="MyApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Привет, WPF" Height="200" Width="300">
    <StackPanel>
        <TextBlock Text="Hello, WPF!" FontSize="24" Margin="10"/>
        <Button Content="Нажми меня" Click="Button_Click"/>
    </StackPanel>
</Window>

А обработчик в code-behind:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Кнопка нажата!");
}

Коротко: WinForms проще для старта и крошечных утилит, WPF мощнее, лучше масштабируется и заточен под MVVM — выбирай WPF для серьёзных проектов.

6

Добавлю практическую заметку: WPF использует векторную отрисовку через DirectX, поэтому на мониторах с высоким DPI (4K, ноутбуки с масштабом 150%) интерфейс остаётся чётким, а у WinForms часто всё мылится и плывёт.

Ещё важно: для WPF почти обязательно освоить паттерн MVVM и привязку данных, иначе вы не получите всех преимуществ и будете писать тот же код-бихайнд, что и в WinForms. Так что закладывайте время на изучение Binding и INotifyPropertyChanged.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект