【问题标题】:System.InvalidOperationException: Can not set VisibilitySystem.InvalidOperationException:无法设置可见性
【发布时间】:2015-09-06 08:51:41
【问题描述】:

我创建了一个窗口,只有当您在其外部单击时才能关闭它。代码在这里运行得很好:

 protected override void OnDeactivated(EventArgs e)
 {
     try
     {
         base.OnDeactivated(e);
         Close();
     }
     catch (Exception ex) { Console.WriteLine(ex.ToString()); }
 }

唯一的问题出现在窗口关闭时,例如alt + f4,尤其是出现了这个异常:

您不能将 Visibility 设置为 Visible 或调用 Show、ShowDialog、Close WindowInteropHelper.EnsureHandle 或在您关闭 Window 时。

我怎样才能确保避免它?实际上我已经用 Try/Catch 管理了异常。

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    在引发窗口的Deactivated 事件之前,会发生Closing 事件(但显然,只有当用户故意关闭窗口时,例如按下Alt+F4)。这意味着您可以在窗口的Closing 事件处理程序中设置一个标志,指示窗口当前正在关闭,这意味着不需要在Deactivated 事件处理程序中调用Close() 方法:

        private bool _isClosing;
    
        protected override void OnClosing(CancelEventArgs e)
        {
            base.OnClosing(e);
            _isClosing = true;
        }
    
        protected override void OnDeactivated(EventArgs e)
        {
            base.OnDeactivated(e);
            if (!_isClosing)
                Close();
        }
    

    【讨论】:

      猜你喜欢
      • 2016-07-09
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 2012-12-14
      • 2010-09-27
      • 2014-02-24
      • 1970-01-01
      • 2016-11-01
      相关资源
      最近更新 更多