WPF не имеет встроенного свойства, чтобы скрыть кнопку «Закрыть» в строке заголовка, но вы можете сделать это с помощью нескольких строк P / Invoke.
Сначала добавьте эти объявления в ваш класс Window:
private const int GWL_STYLE = -16;
private const int WS_SYSMENU = 0x80000;
[DllImport("user32.dll", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
Затем поместите этот код в событие Loaded окна:
var hwnd = new WindowInteropHelper(this).Handle;
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);
А вот и вы: больше нет кнопки «Закрыть». У вас также не будет значка окна в левой части строки заголовка, что означает отсутствие системного меню, даже если вы щелкнете правой кнопкой мыши по строке заголовка - все они объединятся.
Обратите внимание, что Alt + F4 все равно закроет окно. Если вы не хотите, чтобы окно закрывалось до завершения фонового потока, вы также можете переопределить OnClosing и установить для Cancel значение true, как предложил Гейб.