2013-10-28 4 views
0

두 개의 사용자 지정 대화 상자 - dlg1과 dlg2가 있습니다. 사용자가 dlg1에서 NEXT를 클릭하면 텍스트와 OK 버튼이있는 다른 사용자 정의 팝업 대화 상자가 표시됩니다. 이 팝업에서 사용자가 확인을 클릭하면 dlg2가 나타납니다. 나는 많은 것을 시도했지만 그 중 가장 좋은 것은 dlg1과 OK-popup 위에 dlg2를 보여줍니다.WIX 팝업 대화 상자

답변

2

첫 번째 대화 상자에서 두 번째 대화 상자로 사용자를 전달하는 모달 대화 상자를 만들어야합니다. 실제로 모달 대화 상자는 메시지를 표시하고 모달 대화 상자가 호출 된 대화 상자로 포커스를 반환하는 데 사용됩니다. 당신이 어떤 설치 규칙을 위반하는 경우에는 전화 대화에 포커스를 반환하지 않으면 모르겠지만, 그러나 작동하는 것 같다 : 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> 
+0

나는 이것을 시도했습니다. dlg2 창을 이동할 때까지 모든 것이 정상적으로 보입니다. 열린 dlg1 및 PopupDlg가 표시됩니다. 그들을 닫을 수있는 방법이 있습니까? – user1016945

+0

아, 우리는 실제로 몇 가지 규칙을 어기고 있습니다. PopupDlg에서 Publish 요소를 변경할 수 있습니다. 업데이트 된 답변을 참조하십시오. – BdN3504

+0

좋은 해결 방법! 솔루션을 가져 주셔서 감사합니다! – user1016945

0

발견. 그것은 사용자 지정 작업에서 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;  
}