2009-12-16 4 views
25

내 프로젝트 용 GUI를 작성할 때가되어 어떤 기술을 사용해야하는지 궁금합니다. .NET에서 대부분의 .NET GUI 개발을 수행했습니다. & 2이므로 Windows Forms이 적당합니다. 나는 WPF을 모호하게 알고 있지만 아직 시도하지는 않습니다.Windows Forms는 오래된 기술입니까?

Windows Forms가 죽어 있거나 죽어 가고 있습니까? WPF는 배우기 좋은 기술입니까? 미래, 단순한 단계 또는 Windows Forms와 함께 손을 잡을 수있는 기술입니까?

또한 모든 경험이 특히 두 가지를 광범위하게 사용하는 사람들에게 좋은 소식입니다. 두 프레임 워크에서 비슷한 기능을 어떻게 구현 했습니까?

답변

43

WinForms가 죽었거나 죽어 있습니까?

호 그것은 크게 (즉, 새로운 주요 추가) 추가 개발되지 않고, 완전히 예 .NET 4에지지된다.

WPF는 배우기에 좋은 기술입니까?

예.

WinForms와 함께 할 수있는 미래, 단순한 단계 또는 기술입니까?

당신이 결국 WPF까지 이동하는 것을 목적으로하지만, 또한 윈폼으로 작성된 큰 기존의 코드베이스가, 그리고 WPF에서 그들을 다시 작성에 대한 비즈니스 사례가 없습니다 것을 알 수있다. 따라서 WinForms는 계속 지원됩니다.

또한 경험이 풍부 할 것입니다. 특히 두 가지를 광범위하게 사용했던 사람들의 경험이 좋을 것입니다. 두 프레임 워크에서 비슷한 기능을 어떻게 구현 했습니까?

대체로 말해서 WPF는 훨씬 표현력이 있습니다. 프레임 워크를 다양한 방법으로 결합 할 수있는 레고 ​​(Lego) 블록 세트로 간주하면 WinForms 브릭은 훨씬 큽니다 (각각 하나씩). 따라서 모든 것을 하나로 묶을 방법이 적습니다. 꽤 자주, 기존 벽돌이하는 것처럼 뭔가를 필요로 할 때 - 당신이 직접 작성해야합니다. WPF에서는 벽돌이 훨씬 작아서 흥미롭고 놀라운 방법으로 결합 될 수 있습니다.

구체적인 예를 들면, WPF Button이 WinForms처럼 이미지 + 텍스트뿐만 아니라 다른 WPF 컨트롤이나 컨트롤 집합을 임의의 콘텐츠를 호스팅 할 수있는 컨테이너라고 생각해보십시오.

WPF는 WinForms에 비해 동적 레이아웃을 작성하는 것이 훨씬 쉽습니다. 후자 역시 레이아웃을 가지고 있지만, 문제는 비주얼 디자이너에서 작업 할 수있는 왕실의 PITA이고 코드로 WinForms 컴포넌트 초기화를 작성하는 것이 매우 지루하다는 점입니다. WPF를 사용하면 손으로 XAML 마크 업을 작성하고 레이아웃 (일반적으로 컨트롤 트리)은 자연스럽게 XML로 표현됩니다.

위에서 부분적으로 파생되어 WPF가 지역화하기가 쉽다는 것을 알았습니다. 한 가지 이유는 모든 로케일의 문자열 길이를 미리 알지 못하기 때문에 지역화를위한 동적 레이아웃이 실제로 필요하기 때문입니다. WinForms 솔루션은 텍스트 레이블뿐만 아니라 위치 및 크기를 제어하여 "지역화 가능 속성"으로 간주하므로 문자열이 맞지 않는다면 변환기는 양식의 컨트롤을 직접 재정렬해야합니다. WPF에서는 동적 레이아웃이 기본 접근 방식이므로 localizer는 문자열을 처리합니다.

WPF 바인딩 프레임 워크는 (인라인 변환기가 없기 때문에 장황하더라도) 강력한 MVP 및 일반적으로 모델/뷰 분리를 강력하게 지원합니다. 이것은 2.0+에서 WinForms를 사용하여 달성 할 수 있습니다. 또한 거기에서 그렇게하려고 시도하지만, 특히 null 처리와 관련하여 더욱 지루하고 때로는 rather buggy이 될 수 있습니다.

WinForms 디자이너가 소스 제어와 상호 작용하는 방법 중 하나는 매우 어려운 점입니다. 비슷한 문제가 두 가지 있습니다. 무엇보다도 디자이너는 편집 된 양식을 코드로 직렬화하고 때로는 레이아웃을 아주 사소하게 변경하면 디자이너가 완전히 다른 코드를 생성 할 수 있습니다 (도구 막대를 편집하면 특히 눈에)니다). 한 줄에 하나의 속성 값이 있지만 모든 것을 재정렬했습니다. 이로 인해 역사상 많은 소음이 발생합니다 (차이점을 볼 때 정확히 무엇이 변경되었는지 알기가 거의 불가능합니다). 더 중요한 것은 이러한 파일을 병합하는 것이 큰 골치 거리라는 것을 의미합니다. 이는 보통 두 사람이 같은 양식을 동시에 사용하고 그 중 하나가 변경 사항을 커밋하고 다른 하나가 커밋을 시도하고 그 동안 파일이 변경되었음을 확인한 후 병합을 시도하고 diff 파일을보고, 가장 가까운 창 밖으로 점프.

일부 속성을 리소스 파일에 푸시하는 WinForms 지역화 가능 형식을 사용하면 매우 비슷한 문제가 발생합니다. 디자이너는 앞에서 설명한 것과 같은 모든 문제를 포함하여 사소한 변경을 위해 리소스 파일에서 속성 값을 재정렬하는 것을 매우 좋아합니다.

이제 WPF의 결함에 관해서. 중요한 것은 꽤 복잡하고 WinForms, VCL, VB 또는 다른 유사한 "전통적"프레임 워크 만 가진 경험이있는 사람에게는 익숙하지 않다는 것입니다. 또 다른 문제는 내 생각에 문서화가 완벽하지 않다는 것입니다. 일반적으로 괜찮은 개요를 제공하지만 코너 케이스는 거의 다루지 않습니다. 그 중 일부는 꽤 중요 할 수 있습니다. 이것은 WinForms의 경우도 마찬가지입니다. 그러나 가능한 콤비네이션 수가 더 적기 때문에 모서리 케이스가 더 적습니다.

타사 구성 요소의 문제도 있습니다. WinForms는 오랜 기간 동안 사용되어 왔으며, 사용할 수있는 것들이 많이 있으며, 많은 것들이 매우 성숙합니다. WPF는 비교적 어리고 성장통을 겪고 있으며 대부분의 타사 솔루션에서도 마찬가지입니다.

WPF의 한 특정 애완 동물은 대부분의 사람들이, 특히 작은 글꼴 크기에서 일반 Windows ClearType에 비해 훨씬 나쁜 품질로 인식되는 텍스트 안티 앨리어싱 방법입니다. 자세한 내용은 this bug report을 참조하십시오. 이 문제는 WPF 4에서 해결되었지만 아직 릴리스되지는 않았습니다. 그리고 실제로 그렇게 될 때조차도, 여러분은 시도 된 True 3.5 SP1을 오래 동안 사용하고 싶을 것입니다. 수정본은 백 포트되지 않습니다.

+2

감사합니다. 이것은 내가 찾던 정보와 같은 완벽한 대답입니다. 나는 당신의 레고 벽돌 비유를 좋아했다. WPF를 무시하려고했지만 여기에 나온 의견은 학습을 시작할 시간이라고 확신했습니다. – DanDan

+7

부수적으로, 주어진 MS 기술의 성숙의 좋은 신호는 MS 자체가 그 기술을 사용하는지 여부입니다. 이 글을 쓰는 시점에서 WPF 만 사용하는 주요 MS 제품 중 하나 인 Expression Blend와 많은 WPF를 사용하는 새로운 주요 제품이 하나 있으며 새로운 UI 용으로 만 사용되며 WinForms 및 기본 Win32를 몇 가지 기존 비트로 남겨 둡니다. - VS2010. 무엇보다도 WPF에 부정적 영향을 미치는 WPF 결함이 많은 관심을받을 것임을 의미합니다. VS2010 사용으로 인해 .NET 4에 대한 몇 가지 WPF 수정 사항이 있음을 알고 있습니다. –

+0

VS2010은 WPF로 코딩되었으며 2008 년과 비교해 보입니다. 그러나 지난 번 테스트했을 때 stilly buggy였습니다. 그리고 색이 추악한 경우 : –

1

확실히 아닙니다.

Winforms는 사용하기 쉽고 (WPF를 아직 모르는 경우) WPF는 Winforms 모델에서 상당히 벗어났습니다.

간단한 GUI (표준 양식)를 원한다면 Winforms를 사용하십시오. 좀 더 화려 해지고 시간을 보내고 싶다면 WPF로 가십시오.

미래에는 WPF가 어디에서 표준이 될지 확실합니다. 하지만 지금은 신속하고 깨끗한 것을 원한다면 WinForms를 사용합니다.

많은 응용 프로그램이 이미 Winforms를 사용하고 있음을 언급 할 가치가 있습니다. 이는 유지 관리 작업이 종종 WinForms와 관련되어 발생하기 때문에 아직 공식적으로 사용하지 마십시오.

+0

감사합니다. 이것은 제한이 없지만 상당히 간단한 프로젝트이므로 WPF 로의 전환을 시작할 수있는 이상적인 기회 일 수 있습니다. – DanDan

+0

일을 올바르게하고 모델과 뷰를 엄격하게 분리 (예 : MVP 적용)하면 "표준 GUI"가 WPF에서 더 쉽게 수행 될 수 있습니다. –

+0

MVP (또는 WPF 용 MVVP 변형)는 분리 된 코드의 필수 항목입니다. – Finglas

10

WinForms는 죽거나 죽어서도 안됩니다 ... WPF가 할 수있는 것과 동일한 사용자 경험을 제공 할 수는 없습니다 (많은 작업없이). 그들은 단지 오래된 기술 일뿐입니다.

WPF는 배우기에 좋은 기술입니다. 적은 작업으로 훨씬 풍부한 사용자 경험을 제공 할 수 있습니다.

WPF로 작업하기위한 모델은 WinForms와 완전히 다릅니다. 나는 (WPF/실버 라이트보다 더 많이 윈폼)을 모두 사용했습니다 나를 가장 어려운 전환이었다 : 당신이 MXML 같은 다른 마크 업 언어에 대한 경험이있는 경우로 나쁘지 않다

  1. XAML을.

  2. 데이터 바인딩

  3. 인터페이스 이벤트 처리 (마우스 오버 효과, 타임 라인 등)

+0

여기서 WPF는 WinForms의 또 다른 종류가 아니라는 것을 알고 있습니다. 그것이 그것에 약간의 시간을 보내는 것은 가치가있는 것처럼 보인다! – DanDan

3

윈폼 죽어/죽은는 거리가 멀다. WPF는 UI를 다루기위한 새로운 방법 일뿐입니다. WinForms에서 더 어려웠던 것을 촉진합니다. 실제 UI에서 UI 뒤에 모델을 분리하여 쉽게 테스트 할 수있는 것이 큰 요인입니다.

확실히 배울 가치가 있지만, WinForms 방식으로 피팅하는 것보다는 화면을 만드는 "WPF 방식"을 배우십시오. 그것은 다른 코딩 방법입니다.

+0

정보를 제공해 주셔서 감사합니다. "WPF 방식"을 배우기위한 좋은 링크/서적 권장 사항이 있습니까? – DanDan

+1

@ DanDan - 내가 본 최고의 무료 온라인 리소스는 Dr WPF의 웹 사이트 (http://drwpf.com/blog/)입니다. 안녕하세요 ItemsControl A-Z! 저에게 가장 좋은 책은 비록 가장 오래된 책이지만 Sams Publishing이 Adam Nathan의 WPF Unleashed입니다. HTH – Berryl

+0

@Berryl - 좋은 링크, 좋은 발견! – DanDan

1

WinForms가 죽었습니다. Google은 "winforms C# jobs"를 통해 많은 것을 찾을 수 있습니다. WPF는 인기 있지만 여전히 비교적 새로운 요소입니다. 또 다른 2 ~ 3 년 동안 IMHO를 위해 주류가되지는 않을 것입니다.

+0

하지만 주류가 될 것 같습니다. 그래서 조만간 배워야 할 것 같습니다. :) – DanDan

+2

데스크탑/두꺼운 클라이언트 공간에 충분히 오래 있어야하고 네, 확실히 WPF를 배워야합니다. –

2

WinForms는 아마도 기업 환경에 오기까지 오랜 시간 동안있을 것입니다. 그들은 많은 목적을 위해 충분히 잘 작동합니다.많은 프로젝트가 WinForms을 기반으로하고 있으며, 많은 기업들이 혼합 및 매칭보다는 프로젝트 기간 동안이 기술을 고수 할 것입니다.

그런 의미에서 WPF는 미래입니다. 그것은 훨씬 더 효율적이고 훨씬 더 유능한 UI 기술이며 학습 가치가 있습니다.

WinForms와 WPF는 단일 응용 프로그램에서 공존 할 수 있습니다. 이것이 아마도 회사에 도입되는 가장 일반적인 방법 일 것입니다 (저, 작은 개념 증명 프로젝트).

+0

여기서 일반적인 합의는 WPF가 .NET 개발자를위한 미래의 중요한 도구가 될 것으로 보입니다. 귀하의 의견에 감사드립니다! – DanDan

1

여기는 WinForms와 WPF에 대해 좋은 blog post입니다. 전반적인 아이디어는 현명하게 선택하는 것입니다. 즉, 다른 하나보다 우위에 있지는 않습니다. 각각은 기능의 다른 부분 집합을 가지고 있습니다.

그러나 WPF와 WinForms 간의 결정은 다른 이야기입니다. 물론, WPF는 새로운 인기이며 WinForms는 오래되고 파열되었지만 올바른 선택입니까? 분명히 상황에 따라 다르다. 마이크로 소프트는 WinForms를 지속적으로 제공하고 지원하기 때문에 조만간 그 자리에 가지 않을 것이다. 그렇다면 WinForms에 비해 WPF를 선택하는 중요한 요소는 무엇입니까? Karl은 WPF 비즈니스 응용 프로그램 시리즈에서 WinForms 이상의 WPF 선택에 대해 암시하지만 일부 이유는 미묘합니다.

필자는 개인적으로 WPF를 선호하기 때문에 웹 개발자로 시작하여 좀 더 자연스러운 마크 업 XAML을 찾았습니다.

+0

감사합니다. 훌륭한 기사. – DanDan

1

더 많은 주류가되기 전에 WPF를 배우는 것이 가치가 있다고 생각합니다. 스킬 셋을 향상시키고 최신 기술에 대한 지식과 지식을 항상 갖고 있으면 좋을 것 같습니다. 특히 WPF가 앞으로 널리 사용되는 경우 더욱 그렇습니다.

또한 xaml 마크 업을 작성하는 것은 양식을 만드는 것과 매우 다르지만 HTML 작성으로부터 백만 마일 떨어진 곳이 아니며 웹 개발을 수행 한 경우 너무 많이 출발하지 않을 것입니다.

WinForms는 사라지는 것을 의미하지 않는 구식 기술이지만, 우리는 여전히 VB6로 작성된 응용 프로그램을 가지고 있습니다. 개발 부서의 절반만이 .NET으로 작업합니다. 우리는 3 개의 팀으로 나뉩니다. 한 팀은 여전히 ​​.NET 1.1을 사용하고 있고, 다른 팀은 .NET 2를 사용하고 있으며 팀은 .NET 3.5를 사용하고 있습니다. 우리가 운이 좋다면!)

+0

지금 WPF를 배우는 중입니다. 아마도 .NET 3.5 기술에 대한 최신 정보를 얻게 될 것입니다 ... .NET 4.0이 출시되기 전날에 아마! – DanDan

+0

더 나은 출발을! 당신은 항상 .NET 2에서 4.0으로 뛰어 오르는 것을 시도 할 수 있습니다. 그러나 3.5가 주위에 있기 때문에 당신의 머리를 주변에 더 가질 때까지 기다리는 것보다 지금 배우기 시작할 수도 있습니다 :-) – TabbyCool

1

우리는 새 프로젝트를 위해 WPF를 사용하기 시작했고 솔직히 말해서 WinForms로 돌아 가기 란 어렵습니다. 더 이상 할 수없는 깔끔한 것들이 많이 있습니다.

한 단어의 조언. WPF로 훨씬 더 복잡한 레이아웃을 할 수 있지만 (예를 들어, 버튼, 또는 거의 모든 것이 이미지, 텍스트 상자 등의 다른 요소를 호스트 할 수 있음) WinForm에서 발견되는 다른 '기본 사항'은 재현하기가 어렵습니다. . 예 : WPF 툴킷이 나오기 전에 WPF에는 데이터 그리드와 datetime picker가 없었기 때문에 직접해야했습니다. 또한 여전히 MaskTextBox가 없으므로 직접 처리하거나 제 3 자로부터 다운로드해야합니다. 마지막으로 내가 마주 칠 것을 발견 한 것은 Treeview와 같습니다. 나뭇잎과 부모 사이의 선은 표시되지 않습니다.

대부분의 측면에서 WinForm보다 훨씬 뛰어납니다.

+0

나는 두어 번 밖에 보지 못했습니다. 며칠 내로 나를 끌어 들이고 있습니다. 나는 무엇이 나를 몰아서 너무 오래 걸릴지 모르겠다. – DanDan

1

우리는 우리가 새로운 응용 프로그램이 윈폼에서 레거시 코드를 많이 포함

이 새 프로젝트에 WPF를 사용하여 시작합니다.

우리는 winforms의 이전 대화 상자를 사용하고 싶을 때마다 가능합니다.

WPF에 getr을 사용하면 실제로 winforms로 되돌아 가지 않습니다. woul이 winforms에서 많은 시간을 차지하는 GUI 작업을하는 것이 훨씬 더 쉽습니다.

물건을 배우고 모든 기능 (UI뿐만 아니라 데이터 바인딩 및 명령 pattens)을 사용할 수있는 데는 시간이 좀 걸립니다.

첫 번째 아키텍처에 도움이 될 수있는 경험이있는 사람은 매우 유용 할 수 있습니다. 2016에서

+0

나는 좋은 책을 가지고 있고 나를 도울 수있는 스택 오버 플로우가있다. – DanDan

+0

문제 없음. 그것은 단지 일정 위험을 줄여줍니다. 행운을 빕니다 :) – tal

2

관점 :

나는하지 종종이 오래된 질문에의 차임하지만 에필로그이 하나에 적합 할 수 있습니다 생각 옹호 않습니다. 왜? 왜냐하면 지금 (2016), 나는 기업 환경에서 개발자들이 여전히이 질문을 듣는 것을 들었습니다.

예, 7 년 후, WinForms는 여전히 기업 환경에서 살아 있으며 여전히 Microsoft에서 지원합니다. Google Trends은 2005 년 중반 이후 관심이 천천히 꾸준히 감소하고 2005 년의 3 분의 1에 현재 관심이 나타납니다.

WPF는 2009 년에 시작되었지만 새로운 UI 개발을위한 사실상의 표준으로 완전히 넘어선 적이 없었습니다. Google Trends는 WPF의 관심이 2009 년에서 2010 년 사이에 정점에 도달 한 것을 보여준 다음 WinForms보다 빠르다.현재의 검색 관심도는 2011 년의 약 절반이지만 WinForms의 현재 검색 관심도는 거의 두 배입니다.

그렇다면 지금 사용하는 개발자는 무엇입니까? 웹 기반 UI는 모바일 브라우징의 증가로 인기가 폭발적으로 증가했습니다. 웹 UI (AngularJS + WebAPI? ASP.NET MVC? React? 모두 Google 트렌드에서 인기 급상승)를 작성하는 가장 좋은 방법은 논쟁의 여지가 있습니다. 어떤 기술을 사용하든, (반응하는) UI를 작성한 후에는 모든 장치와 플랫폼에서 작동하도록하는 것이 쉽지 않습니다. 클라우드 호스팅 서비스는 낮은 초기 투자 비용으로 사실상 즉시/무한 확장을 제공함으로써 웹에 대한 추진력을 향상 시켰습니다.

오늘 저는 기업 환경에서 오래 오래 있어야하는 앱의 유효 기간을 향상시킬 수 있으므로 웹 UI로 이동하는 것이 좋습니다. 또는 모바일 개발을 담당하는 Microsoft 기반 개발자 인 경우 Xamarin을 살펴볼 가치가 있습니다.

+1

예 - 완전히 동의합니다. 현재 애완 동물 프로젝트를 만들고 있다면, 정말 쉽기 때문에 WinForms를 사용합니다. 더 복잡하고 오래 지속되는 것은 첫 번째 생각으로 웹 UI를 기반으로해야합니다. 데스크탑 전원/보안 (프로그램의 큰 덩어리가 아닌)이 필요한 것은 요즘에는 QT와 같은 무언가가 크로스 플랫폼을 사용해야 할 것입니다. WPF로 신경 쓰지는 않을 것입니다. 웹 기술이 훨씬 더 생생합니다. – DanDan

관련 문제