【问题标题】:WPF Disable Button using IsEnabled="False" do not work within the code使用 IsEnabled="False" 的 WPF 禁用按钮在代码中不起作用
【发布时间】:2019-05-23 22:52:53
【问题描述】:

我正在这里处理一个 GUI 项目,我的问题与禁用提交按钮有关。 GUI 是一个向导,在某些页面中,会有多个提交按钮。

每当用户单击任何提交按钮时,都会进行一些验证,如果一切正常,则将启用下一个输入框(因为它在 XAML 中默认禁用)。当用户更改第二个输入框的文本时,为该输入框分配的提交按钮将被启用。

为了确保用户不会做错事,我想在用户更改第二个输入框的文本时禁用第一个提交按钮。

此时,每当用户更改输入框的文本时,相应的提交按钮都会正常启用,没有问题,但之前的提交按钮不会被禁用。

下面是其中一个页面的图片,您可以看到第二个提交按钮已启用,但第一个按钮未禁用。

我的代码如下:

       #    Main Page Input Boxes.  
            #   Enable Submit Buttons.
        $Global:GuiHash.WizardMainPageInputBox1.Add_TextChanged({$Global:GuiHash.WizardMainPageSubmitButton1.IsEnabled="True"})
        $Global:GuiHash.WizardMainPageInputBox2.Add_TextChanged({$Global:GuiHash.WizardMainPageSubmitButton2.IsEnabled="True"})
        $Global:GuiHash.WizardMainPageInputBox3.Add_TextChanged({$Global:GuiHash.WizardMainPageSubmitButton3.IsEnabled="True"})
            #   Clear default text from the box and disable priviouse submit buttons.
        $Global:GuiHash.WizardMainPageInputBox1.Add_GotFocus({If ($Global:GuiHash.WizardMainPageInputBox1.Text -eq "NSX Manager FQDN:") {$Global:GuiHash.WizardMainPageInputBox1.Dispatcher.Invoke([action]{$Global:GuiHash.WizardMainPageInputBox1.Text = ""})}})
        $Global:GuiHash.WizardMainPageInputBox2.Add_GotFocus({
            Wait-Debugger
            If ($Global:GuiHash.WizardMainPageInputBox2.Text -eq "NSX Manager Admin Password:") {$Global:GuiHash.WizardMainPageInputBox2.Dispatcher.Invoke([action]{$Global:GuiHash.WizardMainPageInputBox2.Text = ""})}
            $Global:GuiHash.WizardMainPageSubmitButton1.IsEnabled="False"
        })
        $Global:GuiHash.WizardMainPageInputBox3.Add_GotFocus({If ($Global:GuiHash.WizardMainPageInputBox3.Text -eq "Output folder path:") {$Global:GuiHash.WizardMainPageInputBox3.Dispatcher.Invoke([action]{$Global:GuiHash.WizardMainPageInputBox3.Text = ""}); $Global:GuiHash.WizardMainPageSubmitButton2.IsEnabled= "False"}})

当我尝试使用 debug-runspace 进行调试时,我在应该禁用提交按钮的代码行上没有收到任何错误。

禁用提交按钮的代码行:

$Global:GuiHash.WizardMainPageSubmitButton1.IsEnabled="False"

调试运行空间:

PS C:\Users\Administrator> Debug-Runspace Runspace11
Debugging Runspace: Runspace11
To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.

Stopped at: If ($Global:GuiHash.WizardMainPageInputBox2.Text -eq "NSX Manager Admin Password:") {$Global:GuiHash.WizardMainPageInputBox2.Dispatcher.Invoke([action]{$Global:GuiHash.WizardMainPageInputBox2.Text = ""})}
[DBG]: [Process:7116]: [Runspace11]: PS C:\Users\Administrator>> 
Stopped at: If ($Global:GuiHash.WizardMainPageInputBox2.Text -eq "NSX Manager Admin Password:") {$Global:GuiHash.WizardMainPageInputBox2.Dispatcher.Invoke([action]{$Global:GuiHash.WizardMainPageInputBox2.Text = ""})}
[DBG]: [Process:7116]: [Runspace11]: PS C:\Users\Administrator>> 
Stopped at: $Global:GuiHash.WizardMainPageSubmitButton1.IsEnabled="False"
[DBG]: [Process:7116]: [Runspace11]: PS C:\Users\Administrator>> 
Stopped at: })
[DBG]: [Process:7116]: [Runspace11]: PS C:\Users\Administrator>> 

【问题讨论】:

  • 尝试将其设置为$false 或数字0(不是字符串“0”)而不是"False"。任何非空字符串都是布尔值 true 在 powershell 中,"False" is not an empty string
  • 艾德,谢谢您的回复。正如您提到的那样,使用语句而不是字符串可以正常工作。
  • 太棒了!很高兴我们解决了。

标签: wpf powershell


【解决方案1】:

感谢 Ed Plunkett,根据他的评论,我需要使用错误语句 $False 而不是使用字符串。将我的代码更改为以下代码就像魅力一样。谢谢埃德。

$Global:GuiHash.WizardMainPageSubmitButton1.IsEnabled=$False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 2013-03-31
    • 2016-04-11
    • 2012-09-11
    • 2021-07-24
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    相关资源
    最近更新 更多