代码之家  ›  专栏  ›  技术社区  ›  Justin

WIX UI-创建“密码不匹配”标签

  •  0
  • Justin  · 技术社区  · 16 年前

    我需要我的安装程序接受一个密码,所以我已经创建了一个对话框,提示用户输入他们的密码两次(以避免错误),但我有一些麻烦,让我的“你的密码不匹配”标签出现和消失在正确的时间。

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

    这是编译,但是标签从不显示(如果我反转条件,则标签会显示,但如果不匹配,则不会消失)。

    有可能这样做吗?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Yan Sklyarenko    16 年前

    WiX只能做底层技术(Windows安装程序)所能做的。与我们以前使用的普通桌面应用程序相比,WindowsInstaller的用户界面很差。所以,回答您的问题:不,您不能根据您在密码字段中键入的值来显示/隐藏标签。至少,我不知道有什么支持的方法。

    但是,您可以执行以下操作。删除该标签,而是向该对话框的“下一步”按钮添加条件。如果密码匹配,则移动到链中的下一个对话框。否则,显示一个消息框说“密码不匹配”,并停留在当前对话框中,直到用户正确填写它。

        2
  •  5
  •   Daniel Powell    15 年前

    <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>
    
        3
  •  4
  •   sleon    11 年前

    以下是我解决这个问题的方法。此解决方案不依赖于禁用“下一步”按钮。相反,它在密码比较期间识别三种状态,但不允许用户继续,除非1)两个密码字段都已填充,2)两个密码字段都匹配。此解决方案还提供文本标签,以便用户更好地了解何时存在错误状态。

    希望这个解决方案能帮助其他人。

    三种状态:

    • 密码匹配
    • 密码不匹配

    错误状态:

    • “密码不匹配”
    • “需要密码字段”

    通过在我的主wxs文件(例如product.wxs)中添加以下TextStyle元素,得到红色的、比普通文本稍大的文本。

    <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>
    
        4
  •  1
  •   user243966 user243966    16 年前

    custom action 验证密码是否匹配并使其控制标签。 This

    推荐文章