Thanks for your reply.
I did some research on the forum based on this new API you provided, it did help me a lot.
My final solution is to use the build-in behavior of RadTreeView, and only subscribe to OnDragOver and OnDropPreview evnets.
This way, I can get the built-in object from OnDragInitialize, note that I don't subscribe to it, so I can get this:
DragDropPayloadManager.GetDataFromObject(e.Data, TreeViewDragDropOptions.Key) as TreeViewDragDropOptions;
This built-in object has everything I needed to handle my own TreeView Drag and Drop behaviors, and I would recommend whoever is in the same situation as me do the same. Save much effort in UI work, and can help focus on the logic behind.