我正在尝试创建一个WiX安装程序对话框,该对话框提供了一系列用户需要填写目录位置的文本框.
我想做的是在每个对话框旁边放一个Browse按钮,当他们点击它时,会出现WiX Browse对话框,他们选择一个文件位置,单击OK,然后将填写浏览按钮旁边的文本框在.
我知道如何使用自定义操作来完成它,但我想知道是否有一种纯粹的WiX方式.
编辑:我应该更清楚.我的意思是目录位置,而不是文件位置.Wix没有文件浏览支持,如下所示.
chr*_*son 22
我最终找到了一种在Wix中完全完成它的方法.Wix附带一个名为BrowseDlg的浏览对话框.这是我做的:
我创建了一个包含PathEdit控件和PushButton控件的对话框.请注意,PathEdit控件将Indirect属性设置为yes.这意味着无论你设置什么属性只是一个指向其他东西的指针.
<Dialog Id="BackupConfigDlg" Width="370" Height="270" Title="Backup Configuration">
<Control Type="Text" Id="lblInstructions" Width="348" Height="13" X="10" Y="10">
<Text>{\WixUI_Font_Title}Please select the directory you want to backup.</Text>
</Control>
<Control Type="Text" Id="lblBackupDirectory" Width="69" Height="9" X="10" Y="40" Text="Backup directory:">
</Control>
<Control Type="PathEdit" Id="Folder" Width="219" Height="15" X="82" Y="38" Property="_BrowseProperty" Indirect="yes" />
<Control Type="PushButton" Id="Browse" Width="56" Height="17" X="304" Y="37" Text="Browse..." />
<Control Type="Line" Id="line" Width="362" Height="2" X="4" Y="229" />
<Control Id="Cancel" Type="PushButton" X="239" Y="240" Width="56" Height="17" Cancel="yes" Text="Cancel">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Type="PushButton" Id="Install" Width="56" Height="17" X="300" Y="240" Text="Install">
<Publish Event="EndDialog" Value="Return" />
</Control>
</Dialog>
Run Code Online (Sandbox Code Playgroud)浏览对话框(我们最终会到达)希望在Directory表中设置一个对象,因此我们需要创建一个Directory对象,该对象仅用于保存我们浏览的值.由于我们不会在其中放置任何组件,因此文件系统上的任何内容都不会与我们选择的目录相关.我称之为TARGETBACKUPDIRECTORY.
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="TARGETBACKUPDIRECTORY">
</Directory>
...
</Directory>
Run Code Online (Sandbox Code Playgroud)现在我们需要创建一个指向Directory对象的属性.
<Property Id="BACKUPDIRECTORY" Value="TARGETBACKUPDIRECTORY" />
Run Code Online (Sandbox Code Playgroud)我们现在需要确保在此对话框打开之前将_BrowserProperty属性正确绑定到BACKUPDIRECTORY(因为它指向我们想要设置的Directory对象).如果不这样做,则在尝试打开对话框时,在安装过程中会出现错误.在我的示例中,PrevDlg是一个出现在BackupConfigDlg之前的对话框.这里发生的是当按下Next按钮时,我将_BrowserProperty属性设置为BACKUPDIRECTORY,然后打开对话框.它必须按照该顺序进行,因此我使用Order属性来强制执行它.当按下浏览按钮时,我做同样的事情,不确定我需要做什么,但我只是为了安全措施.
<Publish Dialog="PrevDlg" Control="Next" Property="_BrowseProperty" Value="[BACKUPDIRECTORY]" Order="1">1</Publish>
<Publish Dialog="PrevDlg" Control="Next" Event="NewDialog" Value="BackupConfigDlg" Order="2">1</Publish>
<Publish Dialog="BackupConfigDlg" Control="Browse" Property="_BrowseProperty" Value="[BACKUPDIRECTORY]" Order="1">
</Publish>
<Publish Dialog="BackupConfigDlg" Control="Browse" Event="SpawnDialog" Value="BrowseDlg" Order="2">
</Publish>
Run Code Online (Sandbox Code Playgroud)这对我有用.
Nic*_*ley 13
选择这个问题的答案是太多的工作.你不需要做那么多.
将PathEdit控件设置为要正常配置的目录.然后,在浏览按钮的操作中,设置_BrowseProperty要配置的属性的NAME(不是值),然后SpawnDialog.而已.
<Control Type="PathEdit" Id="TxtDir" Width="155" Height="15" X="105" Y="57" Property="OUTPUTDIRECTORY"/>
<Control Id="btnDirBrowse" Type="PushButton" Width="56" Height="17" X="260" Y="57" Text="Browse..." >
<Publish Property="_BrowseProperty" Value="OUTPUTDIRECTORY" Order="1">1</Publish>
<Publish Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
</Control>
Run Code Online (Sandbox Code Playgroud)
小智 5
为了在同一个对话框窗口中拥有多个目录(由 BrowseDlg 填充),需要额外的间接寻址。另请注意 <Publish></Publish> 标签内的编号:
<Control Id="WorkingDirFolderLabel" Type="Text" Width="220" Height="12" X="10" Y="50" Text="Working directory:"/>
<Control Id="WorkingDirFolder" Type="PathEdit" Width="250" Height="17" X="10" Y="62" Property="_WorkingDirBrowseProperty" Indirect="yes"/>
<Control Id="WorkingDirBrowse" Type="PushButton" Width="56" Height="17" X="265" Y="62" Text="Browse..." >
<Publish Property="_BrowseProperty" Value="[_WorkingDirBrowseProperty]" Order="2">1</Publish>
<Publish Event="SpawnDialog" Value="BrowseDlg" Order="3">1</Publish>
</Control>
<Control Id="DocsDirFolderLabel" Type="Text" Width="220" Height="12" X="10" Y="100" Text="Documentation area:"/>
<Control Id="DocsDirFolder" Type="PathEdit" Width="250" Height="17" X="10" Y="112" Property="_DocsDirBrowseProperty" Indirect="yes" />
<Control Id="DocsDirBrowse" Type="PushButton" Width="56" Height="17" X="265" Y="112" Text="Browse..." >
<Publish Property="_BrowseProperty" Value="[_DocsDirBrowseProperty]" Order="2">2</Publish>
<Publish Event="SpawnDialog" Value="BrowseDlg" Order="3">2</Publish>
</Control>
Run Code Online (Sandbox Code Playgroud)
然后像以前一样传递引用(不需要定义额外的属性):
<Publish Dialog="PrevDlg" Control="Next" Property="_WorkingDirBrowseProperty" Value="TARGETWORKINGDIRECTORY" Order="1">1</Publish>
<Publish Dialog="PrevDlg" Control="Next" Property="_DocsDirBrowseProperty" Value="TARGETDOCSDIRECTORY" Order="1">1</Publish>
<Publish Dialog="PrevDlg" Control="Next" Event="NewDialog" Value="BackupConfigDlg" Order="2">1</Publish>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12982 次 |
| 最近记录: |