2010-07-15 4 views
7

Ho creato una pagina di dialogo personalizzata in wix e ha una casella di testo. Voglio disabilitare il prossimo pulsante del programma di installazione se la casella di testo è vuota e abilitarla se l'utente ha digitato un valore. Il seguente codice funziona parzialmente. Non disattiva il pulsante successivo, ma non passa alla pagina successiva a meno che non si compili il valore. Il problema che ho è che lo stato del pulsante successivo non viene aggiornato mentre si sta digitando un valore nella casella di testo di modifica. Se rimuovo il valore dalla casella di testo di modifica e poi torno alla schermata precedente e successivamente, il pulsante successivo è disabilitato.Abilita o disabilita il pulsante successivo in base a un valore di controllo del testo attivo in 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> 

risposta

3

Ecco come l'ho fatto.

<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> 
+0

Vuoi provare a rispondere a un'altra domanda su Wix? http://stackoverflow.com/questions/19355537/wix-setting-install-folder-correctly/ –

7

Disabilitare e abilitare il pulsante "Avanti" è quasi impossibile in WIX. La risposta da @ Wjdavis5 disabilita il pulsante "Avanti" per me, ma il pulsante verrà abilitato solo se l'utente fa clic in un'altra casella di testo. Che è fonte di confusione

Il seguente codice è basato su this answer. Mostra una singola casella di testo, quando l'utente fa clic su "Avanti" mostra una finestra di errore o passa alla schermata di installazione.

<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> 
+0

Buona idea, sto usando questa soluzione alternativa per convalidare l'input utilizzando il risultato dell'azione personalizzata. –