Как можно предотвратить закрытие окна при нажатии на кнопку закрытия (крестик) в WPF с использованием C#?

Как можно создать сообщение для пользователя, когда он пытается закрыть окно, установив WindowsStyle на None и предотвратив его закрытие, чтобы уведомить пользователя о недоступности этой функции?
  • 20 августа 2024 г. 7:43
Ответы на вопрос 3
Для предотвращения закрытия окна при нажатии на кнопку закрытия (крестик) в WPF с использованием C# можно перехватить событие Closing окна и отменить его действие. Вот пример кода:

```c#
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    MessageBox.Show("Недоступная операция. Для закрытия окна используйте другие доступные способы.");
    e.Cancel = true;
}
```

Чтобы создать сообщение для пользователя при попытке закрыть окно с установленным WindowsStyle на None, можно использовать тот же подход - перехватить событие Closing окна и отменить его действие. Вот пример кода:

```c#
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (this.WindowStyle == WindowStyle.None)
    {
        MessageBox.Show("Недоступная операция. Для закрытия окна используйте другие доступные способы.");
        e.Cancel = true;
    }
}
```

Таким образом, при попытке закрыть окно с установленным WindowsStyle на None, пользователь увидит сообщение о недоступности этой функции и окно не будет закрыто.
Просто не делай крестик - так не пойдет? 

Можно так - я не претендую на профессионализм - сам не много ковырял.

Делаешь в MainWindow.xaml

<Window>
	<Border Background="#FF464B5F" CornerRadius="35">
		<Grid>
			<Grid>
				<Grid.RowDefinitions>
					<RowDefinition Height="50"></RowDefinition>
					<RowDefinition></RowDefinition>
				</Grid.RowDefinitions>

				<Grid Grid.Row="0" MouseDown="Grid_MouseDown" Background="Transparent"> // это будет "шапка" окна. за нее можно будет перетаскивать окно.
					
				</Grid>

				<Grid Grid.Row="1">
					
				</Grid>
			</Grid>
		</Grid>
	</Border>
</Window>


В файле MainWindow.xaml.cs делаешь

private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == MouseButton.Left)
    {
        this.DragMove();
    }
}


Ну из-за WindowsStyle = None у тебя нет ни крестика, не свернуть окно - поэтому решаешь сам - нарисовать иконку крестик и при нажатии выводить что хочешь
Похожие вопросы