2015-07-22 12 views
7

W przypadku narzędzia wewnętrznego potrzebuję stworzyć coś zbliżonego do edytora węzłów Blendera (patrz obrazek poniżej) lub edytor blueprint UE4 z WPF.Panel "Nieskończony" w WPF

Blender's node editor

Backend i poszczególne bloki nie są problemem, ale nie jestem pewien, jak go o dowolnej wielkości i rozwijającej płótnie. Pomyślałem o używaniu Canvas wewnątrz ScrollViewer, ale myślę, że byłoby trudno przewinąć w lewo (to znaczy, gdyby użytkownik musiał dodać węzły po lewej stronie tego, co uważa ScrollViewer za krawędź). Jestem stosunkowo nowy w WPF, więc czy ktoś może wskazać mi właściwy kierunek?

Odpowiedz

3

Będziesz musiał napisać własną implementację Panel z interfejsem IScrollInfo. Za pomocą tego interfejsu można dynamicznie zmieniać rozmiar panelu w dowolnym momencie, korzystając z metody ScrollOwner.InvalidateScrollInfo(). Oto kilka linków, które pomogą Ci zacząć:

Ben Constable excellent blog post series about IScrollInfo

Virtualizing Canvas example implementation

Twój ostateczny kod powinien zawierać ItemsControl który jest przy użyciu niestandardowego panelu wewnątrz ScrollViewer. Jeśli chodzi o rysowanie połączeń pomiędzy blokami, osobiście użyłbym przezroczystej warstwy nad twoim panelem z kodem OnRender, który narysowałby je za pomocą DrawingContext.

EDIT:

Wyjazd this article. Tutaj znajduje się kontroler podobny do edytora węzłów roboczych.