2

我如何在 wix Edit 控件上进行验证并仅在用户输入一些字符串时才使 Next 按钮可用(不能为空)

<Property Id="BASEKITPATH" Value=" " />

<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
  <Condition Action="disable"><![CDATA[BASEKITPATH = " "]]></Condition> 
  <Condition Action="enable"><![CDATA[BASEKITPATH <> " "]]></Condition>
</Control>

使用上面的代码,安装程序启动时 Next 按钮变为 ReadOnly,但是当我更改文本时 Next 按钮没有任何变化,Next 保持 ReadOnly

似乎是什么问题

4

2 回答 2

2

这是底层 Windows Installer 的已知限制。它有这样的场景,其中 ControlConditions 不起作用,因为它们不验证在显示 UI 时已更改的属性。

典型的解决方法是使用互斥的 ControlEvents。一个调用 SpawnDialog 以显示验证错误消息,另一个调用下一​​个适用的对话框。

于 2012-09-09T20:10:59.930 回答
1

例如,如果有人看,他可以在 Wix 的源代码中找到它。打开“WixUI_InstallDir.wxs”并检查“InstallDirDlg”对话框。

代码示例:

        <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
        <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
        <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
        <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
        <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
        <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
        <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>

检查“SpawnDialog”事件。

于 2015-11-26T20:30:29.940 回答