두 개의 사용자 지정 대화 상자 - dlg1과 dlg2가 있습니다. 사용자가 dlg1에서 NEXT를 클릭하면 텍스트와 OK 버튼이있는 다른 사용자 정의 팝업 대화 상자가 표시됩니다. 이 팝업에서 사용자가 확인을 클릭하면 dlg2가 나타납니다. 나는 많은 것을 시도했지만 그 중 가장 좋은 것은 dlg1과 OK-popup 위에 dlg2를 보여줍니다.WIX 팝업 대화 상자
답변
첫 번째 대화 상자에서 두 번째 대화 상자로 사용자를 전달하는 모달 대화 상자를 만들어야합니다. 실제로 모달 대화 상자는 메시지를 표시하고 모달 대화 상자가 호출 된 대화 상자로 포커스를 반환하는 데 사용됩니다. 당신이 어떤 설치 규칙을 위반하는 경우에는 전화 대화에 포커스를 반환하지 않으면 모르겠지만, 그러나 작동하는 것 같다 : PopupDlg에 대한
<UI>
<Dialog Id="dlg1" ...>
<Control Id="firstText" Type="Text" X="10" Y="10" Width="200" Height="17" Text="First Dialog calls Modal Dialog." />
<Control Id="PopupButton" Type="PushButton" Text="Show Popup" Height="17" Width="56" X="100" Y="243" Default="yes">
<Publish Event="SpawnDialog" Value="PopupDlg" />
</Control>
</Dialog>
</UI>
코드 :
코드 dlg1에 대한
을 dlg2에 대한<UI>
<Dialog Id="PopupDlg" ...>
<Control Id="OkButton" Type="PushButton" Text="{\Tahoma_Bold}OK" Height="17" Width="56" X="200" Y="175">
<Publish Event="NewDialog" Value="dlg2" />
</Control>
</Dialog>
</UI>
코드 :
<UI>
<Dialog id="dlg2" ...>
<Control Id="secondText" Type="Text" X="10" Y="10" Width="200" Height="17" Text="Now proceed." />
<Control Id="CancelButton" Type="PushButton" Text="Cancel" Height="17" Width="56" X="180" Y="243">
<Publish Event="EndDialog" Value="Exit" />
</Control>
</Dialog>
</UI>
UPDATE 위의 솔루션을 구현하면 몇 가지 문제가 발생합니다. 한 가지 해결 방법이 있지만 코드를 읽기 쉽게 만듭니다. 먼저 코드를 게시하기 전에 해결 방법의 개념을 먼저 설명해 드리겠습니다. 기본적으로 두 개의 대화 상자 만 있습니다. 하나는 팝업을 시작하고 다른 하나는 팝업 자체입니다. 팝업에서 위에서 설명한 것처럼 새 창을 열지 않고 대신 호출하는 대화 상자로 포커스를 되돌립니다. 또한 속성의 상태를 변경합니다. 모달 대화 상자에서 설정 한 속성을 기반으로 호출 대화 상자가 업데이트됩니다.
이 목표를 달성하려면 호출 대화 상자의 각 상태에 대한 컨트롤을 추가해야합니다. 하나는 속성이 설정된 경우이고 다른 하나는 속성이 설정되지 않은 경우입니다. callingDialog에 대한
코드 : PopupDlg에 대한
<UI>
<Dialog Id="callingDialog" ...>
<Control Id="BeforePopup" Type="Text" X="10" Y="10" Width="200" Height="17" Text="Here is some text." Hidden="yes">
<Condition Action="show"><![CDATA[NOT PROP_SET_BY_MODAL_DLG]]></Condition>
<Condition Action="hide"><![CDATA[PROP_SET_BY_MODAL_DLG]]></Condition>
</Control>
<Control Id="AfterPopup" Type="Text" X="10" Y="10" Width="200" Height="17" Text="Popup was shown." Hidden="yes">
<Condition Action="show"><![CDATA[PROP_SET_BY_MODAL_DLG]]></Condition>
<Condition Action="hide"><![CDATA[NOT PROP_SET_BY_MODAL_DLG]]></Condition>
</Control>
<Control Id="PopupButton" Type="PushButton" Text="Show Popup" Height="17" Width="56" X="100" Y="243" Default="yes">
<Publish Event="SpawnDialog" Value="PopupDlg" />
</Control>
</Dialog>
</UI>
코드 :이 한 번 더 솔루션을
<UI>
<Dialog Id="PopupDlg" ...>
<Control Id="OkButton" Type="PushButton" Text="OK" Height="17" Width="56" X="200" Y="175">
<Publish Property="PROP_SET_BY_MODAL_DLG" Value="1" Order="1">1</Publish>
<Publish Event="EndDialog" Value="Return" Order="2">1</Publish>
</Control>
</Dialog>
</UI>
발견. 그것은 사용자 지정 작업에서 WinForms 대화 상자를 사용하는 것입니다.
사용자가 다음 버튼 사용자 지정 작업이 호출 클릭
: 당신의 WinForm 대화 호출 할 수 있습니다이 사용자 지정 작업에<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
<Publish Event="DoAction" Value="SomeAction">1</Publish>
</Control>
. 자동 설치 중에 대화 상자가 표시되지 않도록 자동 설치 모드 검사를 설정하는 것을 잊지 마십시오.
[CustomAction]
public static ActionResult SomeAction(Session session)
{
if(Int32.Parse(session["UILevel"]) > 3)
{
var result = MessageBox.Show("Do something?", "Popup dialog", MessageBoxButtons.YesNo);
session["SOMEPROP"] = result == DialogResult.Yes ? "True" : "False";
}
return ActionResult.Success;
}
나는 이것을 시도했습니다. dlg2 창을 이동할 때까지 모든 것이 정상적으로 보입니다. 열린 dlg1 및 PopupDlg가 표시됩니다. 그들을 닫을 수있는 방법이 있습니까? – user1016945
아, 우리는 실제로 몇 가지 규칙을 어기고 있습니다. PopupDlg에서 Publish 요소를 변경할 수 있습니다. 업데이트 된 답변을 참조하십시오. – BdN3504
좋은 해결 방법! 솔루션을 가져 주셔서 감사합니다! – user1016945