WPF против Winforms для .Net Newbies

Я очень новичок в инфраструктуре Microsoft.Net. Мой вопрос: Что легче и быстрее изучить Winforms или WPF?

Ответ 1

Легче и быстрее? Почти наверняка winforms.

WPF хитер для количественной оценки - он более сложный, но более мощный, но, честно говоря, я потерял его будущее... Он убит? Кто знает... Xaml, безусловно, имеет жизнь в мобильных (WP7), хотя.

IMO, хотя ваше время лучше потрачено на изучение веб-интерфейса UI - некоторые jQuery или HTML5.

Ответ 2

Ни и Оба, просто очень субъективны и зависят от вашего фона. Прежде всего, я хочу показать пример приложения со следующими как в WPF, так и в WinForms:

  • Текстовое поле для ввода
  • Кнопка для выполнения "обработки" ввода
  • Метка, на которой будет отображаться результат

WinForms

Окно может выглядеть примерно так:

enter image description here

Код для этого довольно тривиальный и легкий даже для новичка:

private Button _myButton;
private Label _resultLabel;
private TextBox _inputTextBox;
public Form1()
{
    InitializeComponent();
    _myButton = new Button
    {
        Text = @"Process data",
        Top = 100
    };

    _inputTextBox = new TextBox();

    _resultLabel = new Label
    {
        Text = "",
        Top = 200
    };

    Controls.Add(_myButton);
    Controls.Add(_inputTextBox);
    Controls.Add(_resultLabel);

    _myButton.Click += Process_Click;    
}

void Process_Click(object sender, EventArgs e)
{
    _resultLabel.Text = string.Format("Your data is: {0}", _inputTextBox.Text);
}

До сих пор мы ничего не трогали в дизайнере.

WPF

Если мы скопируем и вставим один и тот же код в новое WPF-приложение, есть только несколько вещей, которые мы должны изменить, некоторые из них:

  • Как добавить элементы управления в интерфейс
  • Как мы меняем текст в ярлыке
  • Как мы позиционируем его сверху (margin)

Однако, это просто вещи, которые отличаются друг от друга, это не сложнее и нелегко в том или ином. Так вот, как выглядит окно в WPF:

enter image description here

И код почти идентичен:

private Button _myButton;
private Label _resultLabel;
private TextBox _inputTextBox;
public MainWindow()
{
    InitializeComponent();

    _myButton = new Button
    {
        Content = @"Process data",
        Margin = new Thickness(0, 100, 0, 0)
    };
    _myButton.Click += Process_Click;

    _inputTextBox = new TextBox();
    _resultLabel = new Label
    {
        Content = "",
        Margin = new Thickness(0, 100, 0, 0)
    };
    var panel = new StackPanel();
    panel.Children.Add(_inputTextBox);
    panel.Children.Add(_myButton);
    panel.Children.Add(_resultLabel);   
    Content = panel;
}

void Process_Click(object sender, EventArgs e)
{
    _resultLabel.Content = 
                 string.Format("Your data is: {0}", _inputTextBox.Text);
}

До сих пор как WPF, так и WinForms кажутся одинаково трудными/легкими в освоении. Но это всего лишь подход с кодовым подходом, когда мы приходим к дизайнеру, там огромная разница.

WinForms

Когда вы разрабатываете приложения WinForms, вы перетаскиваете элементы управления на свою поверхность и используете окно свойств для изменения свойств вашего окна. Это выглядит примерно так:

enter image description here

Итак, вы можете перетащить элементы управления, вы можете изменить свойства каждого элемента управления и привязать их туда, где вы хотите, достаточно легко?

WPF

А как насчет WPF? Труднее сделать то же самое? Я не думаю:

enter image description here

Основное отличие здесь в том, что у вас есть дополнительное "окно" внизу. Это окно представляет собой представление XML (XAML) вашего дизайна. Здесь WinForms и WPF отличаются друг от друга. Но так же, как вы можете избежать написания кода дизайна в WinForms, вы также можете избежать этого в WPF, как новичок, который есть.

Что касается новичков, я не считаю это труднее и легче учиться тому или другому, когда мы немного углубляемся в технологию, которая выбирается, конечно, она становится более сложной, Но так же легко и просто, независимо от того, какой из них вы выберете.

Итак, когда вы выбираете тот или иной?

Вы выбираете WinForms, потому что:

  • Это уже давно, и у вас есть большой источник управления, который вы можете использовать.
  • В WinForms есть много хороших ресурсов для обучения и получения новых элементов управления.

Вы выбираете WPF, потому что:

  • Вы можете сделать более богатый пользовательский интерфейс, теперь это все о пользовательском интерфейсе.
  • Вы хотите иметь полный контроль над своим дизайном управления.
  • Вам нужны богатые приложения, управляемые данными.
  • Вам нужен аппаратный ускоренный интерфейс.

Как насчет привязки данных, шаблонов проектирования и всего этого?

Вам не нужно ничего знать о шаблонах дизайна и о том, как все работает, чтобы сделать полезное приложение, особенно не как новичок. Со временем вам придется больше узнать о выбранной вами технологии. Люди склонны говорить, что вам нужно знать MVVM для использования WPF, это не так. Поскольку это не так, вам нужно знать шаблон MVP для создания приложений WinForms.

Обе технологии могут обрабатывать богатые элементы управления, управляемые данными; у вас есть вид сетки и такой в ​​обоих из них. У WinForms есть некоторые довольно приятные функции "drag-n-drop" для обработки данных и их перечисления, а WPF имеет очень хорошую привязку данных.

Что делать, если я не хочу выбирать один или другой?

Красота заключается в том, что вам не обязательно! Вы можете размещать элементы управления WinForms в WPF, и вы можете размещать элементы управления WPF внутри WinForms. Это означает, что если вы разрабатываете приложение WinForms и хотите воспользоваться преимуществами WPF, то вы можете это сделать!

Итак, что проще?

Ни то, ни другое! Как новичок, оба могут выглядеть очень похожими на поверхности, хотя это совсем другое, когда вы идете глубже.

Они похожи, но настолько разные; дело в том, что, когда вы начинаете, вам нужно подумать о других вещах, чем о том, как работает модель маршрутизации и как адаптироваться к MVVM.

Является ли XAML мертвым?

Нет. XAML не мертв. WP7 использует Silverlight, который также использует XAML. Несмотря на то, что в будущем можно многое сделать с HTML5, я сомневаюсь, что XAML собирается "умереть". Люди спрашивали, будет ли WinForms умирать, когда WPF будет выпущен, и это не так.

Ответ 3

Windows Forms, безусловно, более зрелая технология, чем WPF, я бы сказал. Существует достаточное количество документации. Я думаю, что игра WinForms против WPF действительно абсурдна, потому что я думаю, что каждый из них имеет свое собственное использование.

Windows Forms хорош, и вы можете сделать с ним очень привлекательный интерфейс. enter image description here

Но я также думаю, что WinForms очень хорош для разработки приложений Windows Look and Feel Applications, где с WPF вы ищете более мультимедийный/богатый опыт.

Я разработал с WinForms уже много лет и еще не принял WPF, потому что мне все еще не нужно WPF. Я могу получить все, что хочу, с помощью WinForms. На самом деле я разработал всю инфраструктуру, основанную на WinForms, чтобы обеспечить богатый опыт работы с Windows Look и Feel, чтобы легко справляться с приведенными выше результатами.

Однако, если мне нужно создавать богатый мультимедийный опыт, я бы переключился на WPF. Но я занимаюсь разработкой функциональных приложений, таких как взятие, программное обеспечение для отслеживания проблем, фреймворк и т.д.

На самом деле вот еще один пример того, что я сделал с WinForms. Я чувствую, что могу реально продвигать WinForms до предела и иметь возможность идти дальше. Мне нравится развитие в нем.

Я думаю, что когда люди пытаются сопоставить WinForms с WPF с точки зрения дизайна, я не уверен, что они действительно получают именно тот хороший дизайн. Его более причудливые кнопки и анимации, а также красивые элементы управления лентой.

Я здесь не для того, чтобы играть на WinForms или WPF. Я думаю, что оба являются отличными технологиями, но я определенно считаю, что WPF больше ориентирован на богатый мультимедийный стиль.

Кроме того, я не думаю, что один из них легче освоить. WPF вы погружаетесь в другую модель стиля событий с помощью XAML, WinForms, в которую вы погружаетесь, делая больше всего. Я думаю о WinForms против WPF в перспективе С++/С#, но в смысле интерфейса. WPF выглядит как стиль более высокого уровня дизайна с большей абстракцией, что значительно упрощает разработку привлекательного пользовательского интерфейса. Скорее WinForms, вы буквально должны сделать свой проект хорошо, программируя все это.

В заключение (я прыгнул повсюду), я бы попробовал каждый из них и некоторые примеры проектов, и выбрать то, что вам нравится, и что соответствует вашим конкретным потребностям. Я тоже не верю, что только потому, что у вас есть навыки WinForms, вы будете "поддерживать код". В настоящее время в WinForms все еще существуют тонны вещей.

Ответ 4

WinForms значительно легче освоить (так как очень мало учиться). Разработать приложения RAD будет очень легко. С другой стороны, WPF потребует гораздо больших усилий, в то время как ваше приложение будет более обслуживаемым (с помощью парадигмы MVVM).

Ответ 5

Формы Windows, было бы легче изучить.

Просмотрите ссылку для небольшой записи в WPF и Winforms.

Ответ 6

Мне нравится это говорить

Winforms проще, потому что он разработан так же, как вы бы разработали его с помощью вашего текущего уровня интеллекта и опыта, учитывая, что у вас достаточно времени для его реализации. Поэтому вы можете просто поднять его и начать использовать его так, как вы думаете, что все работает. Я часто предполагаю, что при разработке winforms и в 90% случаев он просто работает именно так.

WPF, с другой стороны, по архитектуре и пытается быть способным к умному все время заставляя его беспорядок делать вещи сложности среднего диапазона (угадайте, какая разница между UserControl и CustomControl и когда вам нужно использовать который). Супер простой материал, как редактор перетаскивания, позволяет привлекать пользователей и массивные странные вещи, такие как привязка вашего шаблона приложения "на лету" с помощью веб-сервиса, для 2-х строк просто для показа. Все, что вам нужно, требует от вас взглянуть на документацию/примеры.

Используйте winforms, чтобы все было сделано, и если вам нужна производительность для чего-либо в Direct2d, у Microsoft есть управляемая оболочка для него в Code 1.1 для Windows API.

Ответ 7

Winforms в основном легче узнать, в частности, если вы используете VB6

WPF намного эффективнее во многих отношениях, но у него много новых концепций (например, DataTemplate), которые могут потребовать больших усилий, особенно для начинающих.

Когда вы изучаете WPF, вы обычно изучаете шаблон MVVM. Это хорошо, но по крайней мере для меня было нелегко в начале.

В заключение, WPF имеет больше новых концепций, чем Winform. Вы должны научиться новым вещам и изменить свой образ мышления. Это требует времени, но я думаю, что это того стоит, потому что вы можете использовать такие понятия для других целей. Например, то, что я узнал в WPF, было полезно для программирования на Android.

Ответ 8

В то время как winforms легче освоить, как говорят другие, WPF является предпочтительным интерфейсом для корпоративного приложения .Net в наши дни. Если у вас есть навыки winform, которые вы получаете для поддержки приложений, навыки WPF помогут вам в разработке новых продуктов.

Ответ 9

В большинстве случаев достаточно оконных форм. Вы можете реализовать практически любое отклоненное требование ui из форм окон. То же самое можно вывести из wpf.

Но тип wpf поддерживает парадигму, называемую mvvm, которая отделяет пользовательский интерфейс от модели и взаимодействия/проверки на основе UI от обоих. Это делает различные аспекты приложения независимо проверяемыми. Напр. вы можете взять логику проверки, написать различные тестовые примеры вокруг нее и протестировать ее самостоятельно, не нарушая при этом разработку пользовательского интерфейса или разработку модели.

Но это технически то, что mvvm предлагает вам? Wpf - это технология, которая использует аппаратную ускоренную графику и автономное пиксельное устройство. Значение вашей формы (пока она не изменяется) будет выглядеть одинаково на мониторе, снижая тем самым dpi, или более высокий dpi. (DPI является мерой плотности пикселей).

Поймайте статью здесь:

http://www.codeproject.com/Articles/140611/WPF-Tutorial-Beginning