So, after a two hours spent in Google I finally found a solution.
Step1: define RECT structure like this:
[StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; }
Step2: 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);
Step3: add 'right mouse button 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; } } }