WIX UI - Создание метки «пароли не совпадают» - PullRequest
0 голосов
/ 05 июля 2010

Мне нужен мой установщик, чтобы принять пароль, и поэтому я создал диалоговое окно, в котором пользователям предлагается вводить свои пароли дважды (чтобы избежать ошибок), однако у меня возникают некоторые проблемы при получении моих «Ваши пароли не делают» метка "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>

Компилируется, однако метка никогда не отображается. (если я переверну условие, то метка отобразится, но не исчезнет, ​​если они не совпадают).

Я вижу, что мне не хватает подписки на какое-то событие, которое обновляет метку всякий раз, когда что-то происходит (например, пользователь нажимает клавишу, или фокус теряется из-за одного из элементов управления), однако я не могу чтобы найти любую документацию или примеры того, как я мог бы достичь этого.

Возможно ли это сделать?

Ответы [ 4 ]

5 голосов
/ 20 июня 2011

Вот пример того, что предлагает Ян:

<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 голосов
/ 09 июня 2015

Вот подход, который я выбрал для решения этой проблемы.Это решение не основано на отключении кнопки «Далее».Вместо этого он распознает три состояния во время сравнения паролей, но не позволяет пользователю продолжить, если 1) оба поля пароля не заполнены и 2) оба поля пароля совпадают.Это решение также предоставляет текстовые метки, чтобы пользователь мог лучше понять, когда возникают ошибки.

Надеемся, что это решение поможет другим.

Три состояния:

  • Пароли совпадают
  • Пароли не совпадают
  • Пароли совпадают, но являются пустыми строками

Состояния ошибки:

  • "Пароли не совпадаютmatch "
  • " Обязательные поля пароля "

Чтобы получить красный, немного больше обычного текста, добавьте следующий элемент 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>
2 голосов
/ 06 июля 2010

WiX может делать только то, что может делать базовая технология (установщик Windows).Установщик Windows имеет плохой пользовательский интерфейс по сравнению с обычными настольными приложениями, к которым мы все привыкли.Итак, отвечая на ваш вопрос: нет, вы не можете показать / скрыть метку на основе значения, которое вы ввели в поле пароля.По крайней мере, я не знаю о поддерживаемом способе.

Однако вы можете сделать следующее.Удалите этот ярлык и вместо этого добавьте условие к кнопке «Далее» этого диалогового окна.Если пароли совпадают, переходите к следующему диалогу в цепочке.В противном случае покажите окно с сообщением «пароль не совпадает» и оставайтесь в текущем диалоговом окне, пока пользователь не заполнит его правильно.

Надеюсь, это поможет.

1 голос
/ 05 июля 2010

Насколько я знаю, в Wix нет модели подписки на события.Скорее всего, вам придется создать настраиваемое действие , чтобы убедиться, что пароли совпадают и что они контролируют метку. Это также может помочь.

...