The easiest way I found that works is using a rectangle with a triangle image brush. That's the easy part. There's still two issues I'm figuring out myself, and those are:
- Positioning the arrowhead so that it is directly below target object. This can partially be remedied by using a solution I found here: How to position tooltip bottom center. It does not, however, move the arrowhead, but the ToolTip itself. You can horizontally align the arrow in center, but if the ToolTip doesn't have enough room to be centered, the arrow will not appear directly under the target object.
- Getting the arrowhead to appear above ToolTip box when placement is down and below when placement is up. E.g., in order to accommodate free space, the ToolTip may appear above the target instead of below it. You can use triggers to control which row the element is in, assuming the ToolTip layout is a grid and those are the only placement positions you wish to support.
I haven't tested adding a drop shadow yet, but if yours doesn't show, you could try adding a margin to the ToolTip parent border (doesn't matter because it will never conflict with anything).
For a rectangle with an image brush, you can refer to an article I wrote on CodeProject (it's very simple).
http://www.codeproject.com/Articles/1103396/Image-Controls-Using-Dynamic-Colors

The ToolTip in this example is getting cut off because it's at the very edge of the window. The ToolTip target should be the plus icon, but it's placement is being pushed to the right. Ideally, we want a way to move just the arrowhead back so that it's directly underneath. I have edited the example picture to show the ideal result:

As a side note, if your arrowhead requires a border, you can swap the rectangle out with a path object. You'd just have to know which path to draw :p