0

ProgressBarクローズやキャンセルができない強制を探しています。このウィンドウを作ってみましたが、ALT-F4 でいつでも閉じられます。

プロセスが終了したらウィンドウを閉じたい。

<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>
4

2 に答える 2

3

閉じることはできませんが、ProgressBar閉じるWindowことはできません (進行状況バーを閉じることはできません)。

これを行うにはWindow.Closing、クローズ要求の後、有効なクローズの前に発生するイベントを使用します。

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>

クラスで、次のように設定しBusyProgressBarてクローズ リクエストをキャンセルします。CancelEventArgs.Canceltrue

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

アップデート

イベントを使用する代わりにWindow.Closing、より簡単な解決策はオーバーライドすることWindow.OnClosingです。

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

この方法では、XAML に何も変更する必要はありません。

于 2013-07-24T10:06:40.080 に答える