많은 오브젝트가있는 큰 캔버스를 스크롤 할 수 있습니다 (따라서 왜 그렇게 큰지). 나는 클릭하고 드래그 할 수있는 (예를 들어, 텍스트 상자와 같은) 화면에 놓은 객체가 있습니다. 개체는 마우스를 캡처하는 중이고 Canvas.SetLeft() 및 SetTop()을 OnMouseMoved 이벤트로 호출합니다.많은 오브젝트가있는 큰 캔버스의 성능을 드래그하십시오.
작은 캔버스에서는 잘 작동하지만 수천 개의 개체가있는이 큰 개체는 드래그 한 개체를 매우 천천히 새로 고칩니다 ... 일반적으로 드래그하는 동안 두 번째 새로 고침을합니다. 별로 사용자 친화적이지 않습니다.
나는이 구매를 개선 할 필요가 있는지 어떻게 진행해야할지 잘 모르겠다.
내가 가진 한 가지 생각은 전경에 투명한 캔버스를 현재 창 크기로 유지하고 어린이를 포함하지 않는 것입니다. 드래그를 시작하면 끝날 때까지이 레이어로 이동하고 다시 큰 레이어로 이동합니다. 그래도 또 다른 해킹을위한 많은 노력이 필요합니다.
업데이트 : 천공을 사용하면이 객체를 드래그하는 동안 캔버스가 반복적으로 수행되는 레이아웃 패스를 얻는 것을 볼 수 있습니다. 이것은 느린 부분입니다. 이 문제를 피할 수있는 방법이 있는지 궁금해 ...
일종의 가상화가 도움이 될 것입니다. 하지만 http://blogs.msdn.com/b/kaelr/archive/2010/08/11/zoomableapplication2-a-million-items.aspx는 이동식 항목에는 직접 적용되지 않을 수도 있습니다. –
@ H.B .: 이동 된 항목이 항상 (가상화에 관계없이) 그려지는 한, 정상적으로 적용되어야합니다. 슬로우 리프레쉬는 캔버스가 단지 보이는 것 대신에 아이들의 모든 레이아웃을 반복적으로 레이아웃하는 것일 것입니다. 후자 만하고 있다면, 큰 퍼포먼스가 있어야합니다. –
나는이 캔버스에 내장 된 (옵션?) 가상화 도구가 있었으면 좋겠다 ... 과거에 가상화 된 캔버스를 사용하려고 할 때마다 문제가 발생했지만 다른 시도를 할 때가있다. 아하. –