WPF Troubleshooting (WPF 문제해결)

내가 컨설턴트였던 동안에 WPF에는 개발자들이 많은 시간을 소모할 수 있는 전형적인 문제가 있었다. 그래서 가장 일반적인 실수를 해결하는 방법에 대한 목록을 만들기로 결심했다. 나는 이것이 도움이 되길 희망한다.

Layout (레이아웃)

  • 스크롤바는 활성화 또는 보여지지 않는다.

    • 만약 컨트롤이 수직 패널안에 있다면, 무한 높이의 컨트롤을 레이아웃에게 제공한다. 스택 패널을 도킹패널로 바꾸는 것을 고려해라.
  • 데이터 템플릿을 생성하고 HorizontalAlignment를 Stretch로 설정했지만 항목이 늘어나지 않는다.

    • 리스트의 HorizontalContentAlignment를 Stretch로 설정하라.

DataBinding (데이터 바인딩)

  • 값을 변경했는데 바인디이 변경된 값을 반영하지 않는다.
    • 만약 바인딩 오류가 있다면 Visual Studio 출력창을 확인해라.
    • 당신의 데이터가 INotifyPropertyChanged를 제공하는가?
    • 데이터를 변경하지 않고 단지 PropertyChanged 이벤트를 발생하는 것만으로는 작동하지 않는다. 왜냐하면 바인딩은 옛날값과 새로운값이 다른지를 검사하기 때문이다.

Performance (성능)

  • 아이템 목록의 렌더링 하는데 너무 오래 걸린다.

    • 목록이 가상화되지 않았다. 이말은 모든 아이템이 생성되어지더라도 보여지지 않는다. 이를 피하기 위해서는 다음을 확인하기 바란다.
      • ScrollViewer.CanContentScroll은 반드시 False로 설정되어 있어야 한다.
      • 그루핑은 비활성화 되어 있어야 한다.
      • 아이템 패널을 가상화를 제공하지 않는 것으로 바꿔야 한다.
    • 아주 복잡한 데이터 템플릿을 사용하고 있다.
  • 애니메이션은 CPU 부하가 높다.

    • WPF는 하드웨어 가속을 사용할 수 없고, 소프트웨어 렌더링을 한다. 다음과 같은 이유 때문이다.
      • 윈도우에 AllowTransparancy를 True로 설정했다.
      • 빠른 픽셀 쉐이더(Effects) 대신에 기존의 BitmapEffect를 사용하고 있다.
      • 그래픽 아답타 또는 드라이버가 DirectX를 지원하지 않는다.

Custom Controls (커스텀 컨트롤)

  • 커스텀 컨트롤을 만들었는데 템플릿이 보이지 않는다.

    • DefaultStyleKeyProperty의 메타데이터를 재정의 했고 그것으로 설정되어 있는지 확인하라.
    • 템플릿이 스타일로 둘러싸여져 있고 둘다 맞는 TargetType을 가지고 있는지 확인하라.
    • 기본 스타일이 포함된 리소스 딕셔너리가 로드되었는지 확인하라.
  • 나의 컨트롤 템플릿에 {TemplateBinding}를 사용하는데 작동이 안된다.

    • 대부분의 경우 {TemplateBinding Property}을 {Binding Property RelativeSource={RelativeSource TemplatedParent}}로 바꿔야 한다.
    • 오직 컨트롤 템플릿의 내용안에 TemlateBinding을 사용할 수 있다. 그외 다른 어느곳에서도 실행이 안된다.
    • 트리거내 부모 프로퍼티에 접근하고 싶다면, Relative Source Self를 사용하여 일반 바인딩을 해야 한다.
    • TemplateBinding은 오직 템플릿의 VisualTree안에서만 동작한다. LogicalTree에만 있는 아이템에서는 사용할 수 없다. Freezable 또는 양방향 바인딩을 할 수 없다.

results matching ""

    No results matching ""