Итак, после двух часов, проведенных в Google, я наконец нашел решение.
Шаг 1: определить структуру RECT следующим образом:
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
Step2: импортировать две функции user32.dll:
[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);
Шаг 3: добавить обработчик события «щелчок правой кнопкой мыши по заголовку»:
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;
}
}
}