2010-07-05 48 views
0

我需要我的安裝程序接受密碼,所以我創建了一個對話框,提示用戶輸入密碼兩次(以避免錯誤),但是如果我的「密碼不匹配」標籤出現並在正確的時間消失,我遇到了一些麻煩。WIX UI - 創建一個「密碼不匹配」標籤

這是我到目前爲止有:

<Control Id="Password" Type="Edit" Property="VDIR_PASSWORD" Password="yes" /> 
<Control Id="ConfirmPassword" Type="Edit" Property="ConfirmPassword" Password="yes" /> 
<Control Id="PasswordMismatchLabel" Type="Text" Text="Passwords do not match."> 
    <Condition Action="hide">VDIR_PASSWORD = ConfirmPassword</Condition> 
</Control> 

這將編譯,但確實標籤永遠不會顯示。 (如果我扭轉了條件,那麼標籤顯示,但如果它們不匹配則不會消失)。

我可以看到我缺少的東西是一些事件的訂閱,當事件發生時更新標籤(例如,用戶按下某個鍵,或者焦點從任一控件丟失),但是我不是能夠找到任何文件或我如何實現這一目標的例子。

可以做到這一點嗎?

回答

2

WiX只能做底層技術(Windows Installer)所能做的。與我們以前常用的桌面應用程序相比,Windows Installer的用戶界面較差。因此,回答您的問題:不,您無法根據您輸入到密碼字段中的值顯示/隱藏標籤。至少,我不知道支持的方式。

但是,您可以執行以下操作。放下該標籤,然後將條件添加到此對話框的「下一步」按鈕。如果密碼匹配,移動到鏈中的下一個對話框。否則,顯示一個消息框,指出「密碼不匹配」並保持在當前對話框中,直到用戶正確填寫它。

希望這會有所幫助。

+0

<控件ID = 「下一步」 類型= 「可通過按鈕」 X = 「236」 Y = 「243」 WIDTH = 「56」 HEIGHT = 「17」 默認=」是「Text =」& Next「> <條件Action =」enable「><![CDATA [InDBCONNECTION_STRING_VALID =」1「]]> <條件Action =」disable「><![CDATA [InDBCONNECTION_STRING_VALID =」0 「]]> – Wjdavis5 2013-06-21 19:52:39

1

就我所知,Wix中沒有事件訂閱模型。你可能需要做的是創建一個custom action來驗證密碼是否匹配並控制標籤。 This也可能有幫助。

5

這裏是燕是在暗示的例子:

<Control Id="Next" Type="PushButton" X="238" Y="243" Width="56" Height="17" Text="Next"> 
    <Publish Event="NewDialog" Value="VirtualDirectoryDlg">1</Publish> 
    <Condition Action="disable"> 
    <![CDATA[(ACCOUNT_TYPE = "Service" AND WEB_APP_POOL_SERVICE_NAME = "") OR 
          (ACCOUNT_TYPE = "User" AND 
                 ((WEB_APP_POOL_IDENTITY_DOMAIN = "" OR 
                 WEB_APP_POOL_IDENTITY_NAME = "" OR 
                 WEB_APP_POOL_IDENTITY_PWD = "" OR 
                 WEB_APP_POOL_IDENTITY_PWD_CONFIRM = "") OR (WEB_APP_POOL_IDENTITY_PWD <> WEB_APP_POOL_IDENTITY_PWD_CONFIRM))) ]]> 
    </Condition> 
    <Condition Action="enable"> 
    <![CDATA[(ACCOUNT_TYPE = "Service" AND WEB_APP_POOL_SERVICE_NAME <> "") OR 
          (ACCOUNT_TYPE = "User" AND 
                 ((WEB_APP_POOL_IDENTITY_DOMAIN <> "" AND 
                 WEB_APP_POOL_IDENTITY_NAME <> "" AND 
                 WEB_APP_POOL_IDENTITY_PWD <> "" AND 
                 WEB_APP_POOL_IDENTITY_PWD_CONFIRM <> "") AND (WEB_APP_POOL_IDENTITY_PWD = WEB_APP_POOL_IDENTITY_PWD_CONFIRM))) ]]> 
    </Condition> 
</Control> 
+0

這是有效的,但正如其他人所提到的,UI不會更新,即當」Nex「 t「按鈕不會從禁用狀態轉換爲啓用狀態。相反,你必須前後刷新。不實際。 – 2014-08-26 21:05:16

3

這是我花了解決這個問題的辦法。該解決方案不依賴於禁用「下一步」按鈕。相反,它會在密碼比較期間識別三個狀態,但不允許用戶繼續,除非1)兩個密碼字段已填充,並且2)兩個密碼字段匹配。此解決方案還提供文本標籤,以便用戶更好地瞭解何時出現錯誤狀態。

希望這個解決方案能夠幫助其他人。

三種狀態:

  • 密碼匹配
  • 密碼不匹配
  • 密碼匹配,但都是空的字符串

錯誤狀態:

  • 「密碼不匹配「
  • 「密碼字段需要」

爲了獲得紅色,比正常文本稍大,通過將下面的文字樣式元件進入我主WXS文件(例如product.wxs)。

<UI> 
     <TextStyle Id="WixUI_Font_Large_Red" FaceName="Tahoma" Size="9" Red="255" /> 
</UI> 

這裏是

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<Fragment> 
    <Property Id="PASSWORD_COMPARE" Value="1" /> 
    <UI> 
     <Dialog Id="ConfirmPasswordDlg" Width="370" Height="270" Title="Confirm Password Demo"> 
      <Control Id="PasswdLabel" Type="Text" X="25" Y="65" Width="90" Height="15" TabSkip="no" Text="Password:" RightAligned="yes" /> 
      <Control Id="PasswdEdit" Type="Edit" X="117" Y="62" Width="175" Height="16" Property="PASSWD" Text="{80}" Password="yes"></Control> 
      <Control Id="ConfirmPasswdLabel" Type="Text" X="25" Y="90" Width="90" Height="15" TabSkip="no" Text="Confirm Password:" RightAligned="yes" /> 
      <Control Id="ConfirmPasswdEdit" Type="Edit" X="117" Y="87" Width="175" Height="16" Property="PASSWD_CONFIRM" Text="{80}" Password="yes"></Control> 
      <Control Id="PasswordsMatchLabel" Type="Text" X="150" Y="110" Width="140" Height="18" Text="{\WixUI_Font_Large_Red}Passwords do not match"> 
       <Condition Action="hide">(PASSWORD_COMPARE = "1")</Condition> 
       <Condition Action="show">(PASSWORD_COMPARE = "2")</Condition> 
       <Condition Action="hide">(PASSWORD_COMPARE = "3")</Condition> 
      </Control> 
      <Control Id="PasswordsRequiredLabel" Type="Text" X="150" Y="110" Width="140" Height="18" Text="{\WixUI_Font_Large_Red}Password fields required"> 
       <Condition Action="hide">(PASSWORD_COMPARE = "1")</Condition> 
       <Condition Action="hide">(PASSWORD_COMPARE = "2")</Condition> 
       <Condition Action="show">(PASSWORD_COMPARE = "3")</Condition> 
      </Control> 
      <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="Back"></Control> 
      <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Next"> 
       <Publish Property="PASSWORD_COMPARE" Value="1" Order="1"> 
        <![CDATA[ (PASSWD = PASSWD_CONFIRM) ]]> 
       </Publish> 
       <Publish Property="PASSWORD_COMPARE" Value="2" Order="2"> 
        <![CDATA[ (PASSWD <> PASSWD_CONFIRM) ]]> 
       </Publish> 
       <Publish Property="PASSWORD_COMPARE" Value="3" Order="3"> 
        <![CDATA[ (PASSWD = "" AND PASSWD_CONFIRM = "") ]]> 
       </Publish> 
       <Publish Event="NewDialog" Value="VerifyReadyDlg" Order="4">PASSWORD_COMPARE = "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> 
     </Dialog> 
    </UI> 
</Fragment> 
</Wix>