So, after a two hours of searching i find a solution.
First, we need to define RECT structure.
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
Then import two user32.dll functions:
[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")]
public static extern int TrackPopupMenu(int hMenu, int wFlags, int x, int y, int nReserved, int hwnd, ref RECT lprc);
And now we write our right click on header event handler.
private void headerArea_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
switch (e.ChangedButton)
{
case MouseButton.Right:
{
// need to get handle of window
WindowInteropHelper _helper = new WindowInteropHelper(this);
//translate mouse cursor porition to screen coordinates
Point p = PointToScreen(e.GetPosition(this));
//get handler of system menu
IntPtr systemMenuHandle = GetSystemMenu(_helper.Handle, false);
RECT rect = new RECT();
// and calling application menu at mouse position.
int menuItem = TrackPopupMenu(systemMenuHandle.ToInt32(), 1,(int)p.X, (int) p.Y, 0, _helper.Handle.ToInt32(), ref rect);
break;
}
}
}
May be it isn't best way to solve my problem, so i wiil be happy if someone show me another
way.