using System.Diagnostics; using System.Windows; namespace WPFluent.Controls; public sealed class MessageBoxClosingEventArgs : RoutedEventArgs { private MessageBoxClosingDeferral _deferral = null!; private int _deferralCount; internal MessageBoxClosingEventArgs(System.Windows.MessageBoxResult result) { Result = result; } public bool Cancel { get; set; } public System.Windows.MessageBoxResult Result { get; } public MessageBoxClosingDeferral GetDeferral() { _deferralCount++; return new MessageBoxClosingDeferral(() => { DecrementDeferralCount(); }); } internal void SetDeferral(MessageBoxClosingDeferral deferral) { _deferral = deferral; } internal void DecrementDeferralCount() { Debug.Assert(_deferralCount > 0); _deferralCount--; if (_deferralCount == 0) { _deferral.Complete(); } } internal void IncrementDeferralCount() { _deferralCount++; } }