В WPF установите для свойства Button.IsDefault значение true, чтобы указать, что кнопка является кнопкой «Отправить» для окна. Я не уверен на 100%, что это закроет окно с DialogResult, равным true. Если это не так, вам просто нужно обработать событие Click следующим образом:
this.DialogResult = true;
Редактировать
Аналогично, вы можете использовать свойство Button.IsCancel , чтобы кнопка была кнопкой "отмены" для формы.
Редактировать 2
Я считаю, что причина, по которой ShowDialog обнуляется, заключается в том, что, поскольку он равен нулю до тех пор, пока форма не будет отправлена или отменена, вы можете проверить это, если просматриваете диалог в фоновом потоке. Я не пробовал этого, но кажется логичной причиной, по которой они вводят третье «неизвестное» (нулевое) состояние в свойство.