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을 오래 동안 사용하고 싶을 것입니다. 수정본은 백 포트되지 않습니다.
감사합니다. 이것은 내가 찾던 정보와 같은 완벽한 대답입니다. 나는 당신의 레고 벽돌 비유를 좋아했다. WPF를 무시하려고했지만 여기에 나온 의견은 학습을 시작할 시간이라고 확신했습니다. – DanDan
부수적으로, 주어진 MS 기술의 성숙의 좋은 신호는 MS 자체가 그 기술을 사용하는지 여부입니다. 이 글을 쓰는 시점에서 WPF 만 사용하는 주요 MS 제품 중 하나 인 Expression Blend와 많은 WPF를 사용하는 새로운 주요 제품이 하나 있으며 새로운 UI 용으로 만 사용되며 WinForms 및 기본 Win32를 몇 가지 기존 비트로 남겨 둡니다. - VS2010. 무엇보다도 WPF에 부정적 영향을 미치는 WPF 결함이 많은 관심을받을 것임을 의미합니다. VS2010 사용으로 인해 .NET 4에 대한 몇 가지 WPF 수정 사항이 있음을 알고 있습니다. –
VS2010은 WPF로 코딩되었으며 2008 년과 비교해 보입니다. 그러나 지난 번 테스트했을 때 stilly buggy였습니다. 그리고 색이 추악한 경우 : –