Comportamiento extraño al usar la expresión lambda en los botones de WPF haga clic en el evento

Mi problema es difícil de explicar, así que creé un ejemplo para mostrar aquí.

Cuando se muestra la ventana WPF en el ejemplo a continuación, se muestran tres botones, cada uno con un texto diferente.

Cuando se hace clic en cualquiera de estos botones, supongo que su texto debe mostrarse en el mensaje, pero en su lugar, todos muestran el mismo mensaje, como si todos estuvieran usando el controlador de eventos del último botón.

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);
        }
    }
}

Alguien sabe lo que está ma

Respuestas a la pregunta(3)

Su respuesta a la pregunta