Стив, спасибо за ваше решение. Это действительно правильный ответ, и, наконец, то, что действительно работает, помимо множества плохих ответов в Интернете. У меня есть более короткое (и более безопасное) решение, основанное на вашем ответе. Поскольку непосредственный родитель (e.Parent) кнопки не всегда является MenuItem (из исходного ответа, который является StackPanel), ваше решение не будет работать. Так что просто установите свойство Name для MenuItem (Name = "MyMenuItem") и подключите этот обработчик к кнопке:
private void Button_Click(object sender, RoutedEventArgs e) {
MyMenuItem.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left) {
RoutedEvent = Mouse.MouseUpEvent
});
}