在事件期间无法访问 WPF 按钮

WPF buttons aren't accessible during an event

我在创建的表单中启用和禁用按钮时遇到问题。

如果我从事件处理程序切换按钮的状态,它们会正常禁用。

private void btnBlock_Click(object sender, RoutedEventArgs e)
{
    blockWizard();
}

private void blockWizard()
{
    txtBackupName.IsEnabled = false;
    txtSourceLocation.IsEnabled = false;
    txtDestLocation.IsEnabled = false;
    btnSourceBrowse.IsEnabled = false;
    btnDestBrowse.IsEnabled = false;
    chkRunJobNow.IsEnabled = false;
    txtPassword.IsEnabled = false;
    btnCreateBackup.IsEnabled = false;  
}

如果我从一个方法中调用我的阻塞方法,它不起作用。

private void SomeEvent()
{
    SomeOtherEvent();
    blockWizard();
}

如能提供任何帮助来解释为什么会发生这种情况,我们将不胜感激。

我怀疑您的 SomeEvent 方法是从 UI 线程以外的线程执行的。如果是这种情况,则您无法从其他线程更新 UI。

您可以添加如下内容:

private delegate void blockWizardHandler();

private void blockWizard()
{
   if (Dispatcher.CheckAccess())
   {
       // We are on the UI thread, update the button states
       txtBackupName.IsEnabled = false;
       txtSourceLocation.IsEnabled = false;
       txtDestLocation.IsEnabled = false;
       btnSourceBrowse.IsEnabled = false;
       btnDestBrowse.IsEnabled = false;
       chkRunJobNow.IsEnabled = false;
       txtPassword.IsEnabled = false;
       btnCreateBackup.IsEnabled = false;
   }
   else
   {
       // We are not on the UI thread, invoke delegate to re-run this method on UI thread
       Dispatcher.Invoke(new blockWizardHandler(blockWizard), null);
   }
}