根据Wix中的实时文本控件值启用或禁用下一个按钮?

时间:2010-07-15 10:45:55

标签: user-interface wix controls conditional-statements

我在wix中创建了一个自定义对话框页面,它有一个文本框。如果文本框为空,我想禁用安装程序的下一个按钮如果用户键入了值,则启用它。以下代码部分工作。它不会禁用下一个按钮,但除非您填写该值,否则它不会导航到下一页。我遇到的问题是,当您在编辑文本框中键入值时,不会更新下一个按钮的状态。如果我从编辑文本框中删除该值,然后单击返回上一个屏幕,然后单击下一步,则禁用下一个按钮。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
 <Fragment>
    <UI>
      <Dialog Id="MyCustomDialog" Width="370" Height="270" Title="Custom Dialog Options">
        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next">
          <Condition Action="disable">USERNAME1 = ""</Condition>
          <Condition Action="enable">NOT(USERNAME1 = "")</Condition>
          <Publish Event="NewDialog" Value="VerifyReadyDlg">NOT(USERNAME1 = "")</Publish>
        </Control>
        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back">
          <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
        </Control>
        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
        </Control>

        <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="Please type the value" />

        <Control Id="UserNameText" Type="Text" X="20" Y="60" Width="290" Height="13"  NoPrefix="yes" Text="Please type the username" />
        <Control Id="UserNameEdit" Type="Edit" X="20" Y="72" Width="290" Height="18" Multiline="no" Property="USERNAME1"/>

      </Dialog>
    </UI>
 </Fragment>
</Wix>

2 个答案:

答案 0 :(得分:7)

禁用并启用&#34;下一步&#34;在WIX中按钮几乎是不可能的。来自@ Wjdavis5的答案禁用了&#34; Next&#34;按钮对我来说,但只有当用户点击另一个文本框时,该按钮才会启用。这令人困惑。

以下代码基于this answer。它会显示一个文本输入框,当用户点击&#34; Next&#34;它要么显示错误对话框,要么进入安装屏幕。

<Dialog Id="UserRegistrationDialog" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes">
    <Control Id="UserIdEdit" Type="Edit" X="45" Y="85" Width="220" Height="18" Property="UserID" Text="{80}" />

    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next" >
      <Publish Event="NewDialog" Value="VerifyReadyDlg">2</Publish>
      <Publish Event="SpawnDialog" Value="UserIdError"><![CDATA[UserID = ""]]></Publish>
    </Control>
</Dialog>

<Dialog Id="UserIdError" Width="260" Height="85" NoMinimize="no" Title="[ProductName]"> 
    <Control Id="UserIdErrorDesc" Type="Text" Width="194" Height="30" X="48" Y="15" Text="Please enter a User ID." />
    <Control Id="UserIdErrorOk" Type="PushButton" X="97" Y="57" Width="56" Height="17" Text="Ok">
      <Publish  Event="EndDialog" Value="Return">1</Publish>
    </Control>
</Dialog>

答案 1 :(得分:4)

我是这样做的。

<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="&amp;Next">
      <Condition Action="enable"><![CDATA[InDBCONNECTION_STRING_VALID = "1"]]></Condition>
      <Condition Action="disable"><![CDATA[InDBCONNECTION_STRING_VALID = "0"]]></Condition>
</Control>