0

I am looking for a forced ProgressBar that cannot be closed or canceled. I tried to make this window, but it can always be closed by ALT-F4.

I want to close the window when the process is finished.

<Window x:Class="BWCRenameUtility.View.BusyProgressBar"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="BusyProgressBar" WindowStyle="None" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Label Content="Exporting..."/>
        <ProgressBar Width="300" Height="20" IsIndeterminate="True" Grid.Row="1"/>
    </Grid>
</Window>
Marnix
  • 6,384
  • 4
  • 43
  • 78

2 Answers2

3

You don't want a unclosable ProgressBar but un unclosable Window (a progress bar cannot be closed)!

To do this, use the event Window.Closing which occurs after a close request but before the effective close.

In your XAML:

<Window x:Class="BWCRenameUtility.View.BusyProgressBar"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="BusyProgressBar" WindowStyle="None" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterOwner" ResizeMode="NoResize"
        Closing="BusyProgressBar_OnClosing">

    <!-- Your code -->

</Window>

In the BusyProgressBar class, cancel the close request by setting CancelEventArgs.Cancel to true:

private void BusyProgressBar_OnClosing(object sender, CancelEventArgs e)
{
    e.Cancel = true;  // Cancels the close request
}

Update

Instead of using the event Window.Closing, an easier solution is to override Window.OnClosing.

protected override void OnClosing(CancelEventArgs e)
{
    e.Cancel = true;  // Cancels the close request
    base.OnClosing(e);
}

This way, you don't have to change anything to your XAML.

Cédric Bignon
  • 12,892
  • 3
  • 39
  • 51
0

Maybe just handle Closing event of the window and put e.Cancel = true

Silberfab
  • 65
  • 6