在这里,您可以看到Control in Dialog,它有条件地发布属性。但是在显示对话框时需要可以访问属性,因为其他控件 - 例如TextBoxes使用它们。
如何在不弄乱之前对话框的按钮的情况下实现这一目标?
<UI Id="IdOfUI">
<Dialog Id="IdOfDialog">
<Control Id="IdOfControl" Type="PushButton" >
<Publish Property="PROP" Value="1" Order="1"><![CDATA[PROP2 <> ""]]></Publish>
<Publish Property="PROP" Value="2" Order="1"><![CDATA[PROP2 = ""]]></Publish>
<Publish Property="PROP" Value="3" Order="1"><![CDATA[PROP2 = "" AND PROP3 = ""]]></Publish>
...
</Control>
</Dialog>
<UI>
工具Orca非常有用 - 它以msi
显示结果序列
<Fragment>
<Property Id="PROP1" />
<Property Id="PROP2" />
<SetProperty Id="PROP1" Action="SetPROP1_0" After='AppSearch' Value="VALUE1" ><![CDATA[PROP1 <> ""]]></SetProperty>
<SetProperty Id="PROP1" Action="SetPROP1_1" After='AppSearch' Value="[VALUE2]"><![CDATA[PROP1 = "" AND VALUE2 <> ""]]></SetProperty>
<SetProperty Id="PROP2" Action="SetPROP2_1" After='SetPROP1_0' Value="[PROP1]"></SetProperty>
答案 0 :(得分:1)
你做不到。意思是,你必须提前设置属性(可能在那些“以前的对话框”中),在Windows安装程序中没有类似“form.onload”事件。
这是它的禅 - “由最开明的建筑宇航员设计,由最差的程序员实施”(c) - 这当然是一个悲伤的笑话,但部分是真的......一定要真正开悟让我们设计用户使用关系数据库表的接口。
答案 1 :(得分:1)
MSI对话框行为是在您转换到下一个对话框之前发布的范围不在范围内。所以通常的解决方法是将控件分成不同的屏幕。 WiX维护UI(修复,更改,删除)以这种方式工作。他们使用Push按钮发布然后转换到可以使用它们的下一个对话框,而不是使用Radio并停留在同一个屏幕上。然后,您还可以在按钮上放置漂亮的图标,您可以使用无线电选择。