WPF에는 Layout TransformRender Transform 의 두 가지 트랜스폼이 존재한다. 각각을 적용했을 때 다른 결과가 나타나서 둘의 차이가 뭔지 궁금해서 찾아본 결과 명료하게 정리된 포스팅이 있어 다시 정리해보려고 한다.


아래의 내용은 다음의 두 블로그를 참조했다.

http://www.scottlogic.co.uk/blog/colin/2008/12/layouttransform-vs-rendertransform-whats-the-difference/

http://www.vbdotnetheaven.com/uploadfile/7b0949/rendertransform-and-layouttransform-in-wpf/



WPF에서 레이아웃을 렌더링할 때는 다음의 순서를 거친다.

  • Measure : 각 엘리먼트의 DesiredSize 를 연산
  • Arrange : child 엘리먼트들의 위치를 부모 엘리먼트 기준으로 연산
  • Render  : 연산된 ui(user interface)를 화면에 렌더링


두 트랜스폼의 차이점은 트랜스폼이 이루어지는 시점인데, 각 트랜스폼은 다음의 시점에 이루어진다.


  • LayoutTransform
  • Measure
  • Arrange
  • RenderTransform
  • Render


따라서 LayoutTransform의 결과는 Measure, Arrange 의 연산 결과에 반영되지만 RenderTransform의 결과는 이에 반영되지 않고 렌더링 과정에만 반영된다. 따라서 퍼포먼스는 RenderTransform의 경우가 LayoutTransform의 결과보다 좋다.


차이를 확인하기 위해 간단한 프로젝트를 만들어서 테스트해보았다.


StackPanel 에 버튼을 3개씩 만들고, 두번째 버튼에 RotateTransform 을 각각 LayoutTransform, RenderTransform으로 적용한 결과이다.




결론은, 가능하다면 RenderTransform을 사용하는 것이 좋고(더 빠르기 때문), 사용이 불가능하다면 LayoutTransform을 사용하면 되겠다.


+ Recent posts