omportamento estranho ao usar a expressão lambda nos botões WPF, clique no evento

Meu problema é difícil de explicar, então criei um exemplo para mostrar aqu

Quando a janela WPF no exemplo abaixo é exibida, três botões são exibidos, cada um com um texto diferent

Quando qualquer um desses botões é clicado, presumo que seu texto deve ser exibido na mensagem, mas todos exibem a mesma mensagem, como se todos estivessem usando o manipulador de eventos do último botão.

public partial class Window1 : Window {
    public Window1() {
        InitializeComponent();
        var stackPanel = new StackPanel();
        this.Content = stackPanel;
        var n = new KeyValuePair<string, Action>[] { 
            new KeyValuePair<string, Action>("I", () => MessageBox.Show("I")), 
            new KeyValuePair<string, Action>("II", () => MessageBox.Show("II")), 
            new KeyValuePair<string, Action>("III", () => MessageBox.Show("III"))
        };
        foreach (var a in n) {
            Button b = new Button();
            b.Content = a.Key;
            b.Click += (x, y) => a.Value();
            stackPanel.Children.Add(b);
        }
    }
}

Alguém sabe o que está errado

questionAnswers(3)

yourAnswerToTheQuestion