Как можно предотвратить закрытие окна при нажатии на кнопку закрытия (крестик) в 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, пользователь увидит сообщение о недоступности этой функции и окно не будет закрыто.
Просто не делай крестик - так не пойдет? <br/> <br/> Можно так - я не претендую на профессионализм - сам не много ковырял. <br/> <br/> Делаешь в MainWindow.xaml <br/> <br/> <pre><code>&lt;Window&gt;
	&lt;Border Background="#FF464B5F" CornerRadius="35"&gt;
		&lt;Grid&gt;
			&lt;Grid&gt;
				&lt;Grid.RowDefinitions&gt;
					&lt;RowDefinition Height="50"&gt;&lt;/RowDefinition&gt;
					&lt;RowDefinition&gt;&lt;/RowDefinition&gt;
				&lt;/Grid.RowDefinitions&gt;

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

				&lt;Grid Grid.Row="1"&gt;
					
				&lt;/Grid&gt;
			&lt;/Grid&gt;
		&lt;/Grid&gt;
	&lt;/Border&gt;
&lt;/Window&gt;</code></pre> <br/> <br/> В файле MainWindow.xaml.cs делаешь <br/> <br/> <pre><code>private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == MouseButton.Left)
    {
        this.DragMove();
    }
}</code></pre> <br/> <br/> Ну из-за WindowsStyle = None у тебя нет ни крестика, не свернуть окно - поэтому решаешь сам - нарисовать иконку крестик и при нажатии выводить что хочешь
RTFM: <a href="https://learn.microsoft.com/en-us/dotnet/api/system.windows.window.closing?view=windowsdesktop-8.0" rel="nofollow">System.Windows &gt; Window Events &gt; Window.Closing</a>
Похожие вопросы