【问题标题】:WIX UI - Creating a "passwords don't match" labelWIX UI - 创建“密码不匹配”标签
【发布时间】:2010-07-05 06:44:49
【问题描述】:

我需要我的安装程序接受密码,因此我创建了一个对话框,提示用户输入密码两次(以避免错误),但是我在获取“您的密码不”时遇到了一些问题t match”标签在正确的时间出现和消失。

这是我目前所拥有的:

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

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

我可以看到我缺少的东西是订阅一些事件,每当发生某些事情时更新标签(例如,用户按下一个键,或者焦点从任何一个控件中丢失),但是我不能查找有关我如何实现此目的的任何文档或示例。

可以这样做吗?

【问题讨论】:

    标签: wix conditional-statements


    【解决方案1】:

    以下是 Yan 建议的示例:

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

    【讨论】:

    • 这行得通,但正如其他人所提到的那样,UI 没有更新,即当在“下一步”按钮中填写值时,不会从禁用转换为启用。相反,您必须前后来回刷新。不实用。
    【解决方案2】:

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

    希望此解决方案对其他人有所帮助。

    三种状态:

    • 密码匹配
    • 密码不匹配
    • 密码匹配,但为空字符串

    错误状态:

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

    要获得比普通文本略大的红色,请将以下 TextStyle 元素添加到我的主 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>
    

    【讨论】:

      【解决方案3】:

      WiX 只能做底层技术 (Windows Installer) 可以做的事情。与我们都习惯的普通桌面应用程序相比,Windows Installer 的 UI 很差。因此,回答您的问题:不,您不能根据您在密码字段中输入的值显示/隐藏标签。至少,我不知道支持的方式。

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

      希望这会有所帮助。

      【讨论】:

      • 控制>
      【解决方案4】:

      据我所知,Wix 中没有事件订阅模型。您可能需要做的是创建一个custom action 来验证密码是否匹配并控制标签。 This 也可能有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-04-25
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 2017-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多