WPF를 배울 때 가장 이해하기 어려웠던 점은 무엇입니까?
당신은 어떤 WPF를 했습니까?
- 이해하기 어려운
- 오랫동안 오해를 받았거나
그리고 마지막에는 어떻게 이해하셨습니까(링크 등을 제공해 주십시오).
(WPF에 대한 학습을 안내하기 위해 이 질문을 드립니다.)
미안해요, 너무 길어져서...그것이 도움이 되기를 바랍니다!한 가지 언급하고 싶은 것은 이것들이 저를 넘어뜨린 개념들이라는 것입니다. 만약 여러분이 이제 막 시작한다면 무엇을 공부해야 할지 항목별 목록으로 사용할 수 있을지 모르겠습니다.저는 몇 권의 책을 읽고, 많은 블로그(Josh Smith, Dr. WPF)를 읽고, 일반적으로 작은 프로젝트에서 무언가를 시도합니다.
핵심 개념
논리적 및 시각적 트리(링크: 1)
WPF의 다양한 트리 이해.특히 논리 트리 대 시각적 트리를 이해하고 논리 트리의 요소가 데이터 템플릿, 제어 템플릿 등을 통해 시각적 트리로 확장되는 방식을 이해합니다.
-
WPF의 전체 종속성 속성 시스템을 이해하는 것은 처음 보는 것보다 훨씬 더 큽니다.물론, 빠른 종속성 속성을 만든 다음 이 속성을 사용하여 데이터 바인딩 및 애니메이션과 같은 다른 WPF 개념을 강화하는 것은 쉽지만, 그 후에 시작됩니다.
일반 종속성 속성이 있고 연결된 종속성 속성이 있습니다.이를 모두 등록하는 방법은 여러 가지가 있으며 설정할 수 있는 메타데이터 옵션도 여러 가지가 있습니다.
그것이 왜 종속 재산이라고 불리는지 이해하는 데 시간이 좀 걸렸습니다.즉, 속성의 값이 다양한 소스(속성은 이러한 가치 제공자에 따라 다름)에서 발생하며, 특정 시점의 최종 속성 값이 설정되는 방법에 대한 우선 순위/알고리즘이 있다는 것을 이해합니다.
-
버블링, 라우팅 또는 직접적인 방법 이해.라우팅된 이벤트도 연결할 수 있음(시각적 트리를 라우팅한 이벤트에 이벤트 핸들러를 연결하는 것과 반대).
팁들
Adam Nathan의 WPF Unlized의 3장은 이러한 중요한 새로운 개념과 읽고, 프로젝트를 수행하고, 다시 읽어야 하는 새로운 개념을 다루는 멋진 장입니다.
WPF 박사의 스니펫은 종속성 속성, 라우팅된 이벤트 및 명령에 대해 배울 수 있는 좋은 방법입니다.
그래픽 개념(링크: 1)
-
WPF는 해상도 독립성(장치 독립 픽셀로 모든 것을 지정함)의 모든 이점을 제공하지만 이는 해결해야 할 몇 가지 문제도 가져옵니다.가장 주목할 만한 것은 픽셀 스냅을 활용하거나 지침을 설정하는 등을 통해 원하는 때에 사물을 선명하게 보이게 하는 것입니다.
보존 모드 대즉시 모드
WPF에는 도면 명령을 추적하고 나중에 사용할 수 있도록 캐시하는 보존 모드 도면 하위 시스템이 있습니다.한 번에 모두 업데이트되는 많은 비주얼을 가진 것을 구축하려는 경우 성능 문제가 발생할 수 있습니다.
컨트롤, 요소, 시각(링크: 1)
WPF 계층의 각 작업이 사용자에게 미치는 영향을 이해하고 성능에 미치는 영향을 이해합니다.특히, 재템플릿, 스타일 변경 등을 수행할 수 있는 컨트롤을 사용하고 있습니까?또는 강력하고 빠르게 운전할 수 있도록 초경량(예: Visual 계층에 대한 프로그래밍)이 필요합니까?
팁들
Chris Sells와 Ian Griffiths는 WPF API의 다양한 유형, 계층 구조에 적합한 위치, 그리고 그들이 어떤 가치를 제공하는지에 대해 설명하는 훌륭한 부록을 그들의 프로그래밍 WPF 책 뒤에 가지고 있습니다.
WPF 패턴
모델-뷰-뷰 모델(MVVM) 패턴(링크: 1)
MVVM 패턴은 WPF 방식으로 작업을 시작하는 데 도움이 되는 것으로 이미 언급되었습니다.전적으로 찬성합니다.컨트롤을 데이터로 채우는 대신 데이터 템플릿을 통해 데이터를 시각적으로 변환하기 시작합니다.
-
WPF는 다른 API와 달리 확장 가능합니다.부착된 속성을 활용하여, 당신은 당신이 갇혔을 것이라고 생각했던 곳에 매우 우아한 방식으로 추가적인 행동을 만들 수 있습니다.
WPF!= Windows 양식
나는 누군가가 이미 이것을 언급했다는 것을 알지만 나는 단호하게 동의하고 싶습니다.새롭고 다양한 개념들이 있습니다. 여러분은 정말로 많은 것들을 배우고 완전히 다른 각도에서 문제를 해결하는 것에 접근해야 합니다.예를 들어 Windows Forms는 즉시 모드 그리기 하위 시스템이고 WPF는 유지 모드 하위 시스템입니다(위).
WPF에서 할 수 있는 다양한 방법
이것은 재미있는 이야기지만, WPF에는 무언가를 할 수 있는 많은 방법들이 있기 때문에, 그것은 거의 마비됩니다.어떤 방법이 일을 하는 올바른 방법입니까?이거야?그거야?저는 그것을 잘못된 방법으로 하는 것에 대한 두려움을 극복해야 했고, 그냥 뛰어들어야 했고, 제 실수로부터 배워야 했습니다.
WPF가 WinForms가 아닙니다.WinForms에서 작업을 수행하는 데 사용하는 일반적인 전략 중 대부분은 WPF에서 잘못된(또는 가장 효율적이지 않은) 방법입니다.명령, 종속성 속성, 바인딩, 템플릿 등은 WinForms 사고방식을 채택할 경우 유용하지 않습니다.
현재 대규모 시각화 애플리케이션을 개발 중입니다.숙련된 WinForms 프로그래머로서, 다차원 데이터 디스플레이에서의 첫 컷은 수천 개의 시각적 요소를 사전에 계산했습니다.슬라이더는 콜백을 사용하여 시각적 요소의 치수를 이동합니다.초기 설정을 초과하는 데이터는 로드되지 않습니다.이것은 성능이 매우 좋지 않았습니다.
수백 개의 시각적 요소에 불과한 데이터 변환기를 사용하여 수천 개의 바인딩으로 전환하고 데이터를 즉시 로드하고 재계산합니다.그 결과 성능이 크게 향상되었습니다.수천 개의 바인딩이 수천 개의 사전 계산된 시각적 요소보다 빠르다는 것은 거의 상상할 수 없었지만 WPF의 경우는 그렇습니다.
"WinForm에서 WPF: 빠른 참조 가이드"가 유용할 수 있습니다.
WPF를 배우기 시작했을 때 가장 힘들었던 점은 다음과 같습니다.
- 스타일 및 템플릿: 어떤 것을 사용해야 하는지, 그리고 서로 어떻게 상호 작용하는지 이해하는 데 시간이 좀 걸렸습니다.
- 가 있는 복합 :
RelativeSource
변환기... - : 저는 도 가끔 에 사용해야 .
DataTrigger
s,Trigger
상심한EventTrigger
s... - 종속성 속성 및 연결된 속성의 메커니즘
- 라우팅된 이벤트의 작동 방식
Windows Forms(윈도우 폼)를 사용해 본 경험이 있는 경우 처음에는 어려워 보일 수 있는 여러 가지 사소한 일들이 있습니다.당신은 많은 것을 배우고 UI 구조의 매우 다른 정신적 모델로 전환해야 합니다.
처음에 저는 Windows Forms에서 했던 것처럼 코드를 만들기 시작했습니다. 코드 뒤에 많은 것들이 있었습니다. 하지만 그것은 확실히 올바른 방법이 아니었습니다.MVVM 패턴은 제가 WPF "철학"에 들어갈 수 있도록 정말 도움이 되었습니다.
WPF 학습을 위한 저의 주요 문서 출처는 물론 MSDN이었는데, 찾을 줄 알면 대부분의 답을 찾을 수 있습니다.저는 다음 블로그에서도 많은 것을 배웠습니다.
종속성 속성에 시간이 걸렸습니다.여기 좋은 기사가 있습니다. 그리고 이 새로운 개념을 만드는 데 도움이 된 또 다른 기사가 있습니다.
두 번째 기사는 제가 가진 몇 가지 질문을 정말 명확하게 설명하는 다음 단락을 포함했습니다.
종속성 속성 시스템의 핵심 가치는 등록된 이해 관계자에게 속성 값이 변경될 때마다 자동으로 통지하는 속성을 구축하는 기능이었습니다.이러한 관찰자 패턴의 자유롭고 고통 없는 자동 구현은 매우 강력하며 클라이언트 프로그래머의 부담을 크게 줄여줍니다(사실 데이터 바인딩 시스템은 여기에 의존합니다!).
더 일반적으로, 저는 웹 개발(특히 브라우저 UI)에 대한 이전의 경험이 WPF를 "얻는" 데 매우 유용하다는 것을 발견했습니다.Windows Forms 또는 기타 풍부한 클라이언트 응용프로그램으로만 작업한 경험이 있는 사람과 비교하여 WPF에 가져올 수 있는 사고방식에 더 중점을 둡니다.
웹 세계에서 더 명확한 유사점은 CSS, 흐름 레이아웃, jQuery 애니메이션, 이벤트 버블링/라우팅 및 광범위한 브라우저 및 DHTML 객체 모델에 익숙하다는 것입니다.
MMVM은 배우기에 꽤 까다로운 것입니다.하지만 저는 WPF의 가장 좋은 점 중 하나라고 생각합니다.그것들은 실행하기가 조금 어려운 많은 시나리오이기 때문에 그것을 얻기 위해서는 많은 공부가 필요합니다.
Thomas가 지적했듯이 Josh Smith와 다른 사람들의 훌륭한 자료들이 많이 있습니다.WPF는 공부하기 매우 쉽지만 실제로 다양한 시나리오를 보려면 응용프로그램을 작성해야 합니다.
데이터 템플릿(및 해당 사항에 대한 제어 템플릿).
겉으로 보기에는 상당히 간단하지만, 일단 서로 다른 XAML 파일 간에 바인딩을 설정하려고 하면 심각하게 혼란스러울 수 있습니다.
저는 많은 MSDN 문서들, 그리고 더 나아가 시행착오를 겪으면서 마침내 그것을 통해 제대로 파악할 수 있었다고 생각합니다.물건을 가지고 노는 것은 보통 어떤 기술이든 배우는 가장 좋은 방법입니다.
나는 여전히 치트시트 없이 애니메이션에서 대상 속성을 지정할 수 없습니다.
<DoubleAnimation
Storyboard.TargetProperty=
"(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
To="1.2" Duration="0:0:.2" />
초보자의 시각에서 살펴보도록 하겠습니다.WPF 개발을 위해 KaXML이나 Sharpdevelop과 같은 간단한 에디터를 사용하고 있는데 Database grid component 없이는 데이터베이스 개발을 진행할 수 없습니다.따라서 Windows 양식과는 다릅니다.상용 데이터베이스 그리드 구성 요소를 검색하기 시작합니다. 그러면 방어에서 사람들은 그것이 가장 어려운 일이나 제한 사항이 아니라고 말할 것입니다.
진지한 응용 프로그램 개발을 위해서는 C# 파일이나 .NET Framework에서 지원하는 다른 언어 파일로 작업해야 합니다.그것이 그렇게 문제가 되지 않는다면, 왜 처음부터 그것을 사용해야 합니까?C#에 만족합니다. 왜 WPF를 사용해야 합니까?
지금까지 가장 힘든 일:
- 데이터 바인딩,
- 다른 언어에 대한 종속성(예: C#),
- 그래픽 기능.
가장 큰 골칫거리는 프로가 만든 WPF 앱에서 다른 개발자가 작업하도록 할 수 없다는 것입니다.WinForms 및 Asp.net 에서는 문제가 거의 발생하지 않습니다.이것은 중요한 문제입니다.
WPF에서 레이아웃이 다릅니다. 레이아웃 편집기 사용 방법은 링크를 참조하십시오.
바인딩 구문의 차이는 바인딩을 사용할 때와 정적 리소스/동적 리소스를 사용할 때입니다.제가 WPF를 처음 배울 때, 저는 두 가지를 계속 혼동했습니다.
다른 형태의 DP와 첨부된 속성 또한 처음에는 이해하기 어려웠습니다.
책을 읽고 내용을 이해하는 것과 프로젝트에 적용하는 것은 별개입니다.Outlook과 마찬가지로 비교적 간단한 연락처 목록 컨트롤을 만들고 있었는데 작지만 눈에 띄는 많은 학습 곡선을 발견했습니다.
- 첫째, 템플릿은 읽을 때는 간단해 보이지만 가지고 놀 때는 더 까다로워집니다.텍스트 상자의 초점이 맞춰질 때 사용자 컨트롤의 배경색을 설정하는 것은 어려운 일이었습니다.알고 보니 제가 사용해야 했습니다.
DataTrigger
(누가 생각했겠어요?) - 래퍼를 사용하여
ItemsPanel
List box는 아이템을 정렬하지 않아서 갑자기 어려움이 되었습니다(당신은 그것을 가지고 놀아야 합니다. - 물론입니다
RelativeSource
제본 중인
기본적으로 템플릿의 컨트롤(부모에서 자식으로 또는 그 반대로)을 바인딩할 수 있는 것이 좋은 학습 곡선입니다.
내 조언.작은 앱을 작성하면 모든 것이 하나로 합쳐지는 것을 볼 수 있습니다.
언급URL : https://stackoverflow.com/questions/1445114/what-did-you-find-hardest-to-understand-when-learning-wpf
'programing' 카테고리의 다른 글
Objective-C 블록을 속성으로 사용할 수 있습니까? (0) | 2023.05.26 |
---|---|
Node.js에 파일/디렉토리가 있는지 동기화하여 확인 (0) | 2023.05.26 |
기본 키와 클러스터된 인덱스의 관계 (0) | 2023.05.26 |
급행 간의 차이입니다.라우터와 앱.get? (0) | 2023.05.26 |
도커 구성: npm 설치 성공 후 볼륨에 node_modules가 없음 (0) | 2023.05.26 |