WiX - ¿Cómo refrescar el control Edición después de diálogo de exploración de archivos

votos
0

Estoy obligado a tener un FileBrowseDialog durante una instalación de WiX. Hice mi propio diálogo personalizado que eleva el OpenFileDialog y define el valor seleccionado en la propiedad de sesión (que se encuentra el código aquí ). Necesito una manera de refrescar el control de edición con la ruta completa seleccionada. En este momento, después de elegir el archivo, el control de edición permanece en blanco. ¿Cómo logro esto? No soy un experto en MSI o WiX.

Código Wix :

<UI>
  <Dialog Id=DrugsDBFileBrowseDialog Width=370 Height=270 Title=!(loc.DrugsDBFileDlg_Title)>
    <Control Id=BannerBitmap Type=Bitmap X=0 Y=0 Width=370 Height=44 TabSkip=no Text=!(loc.SetupTypeDlgBannerBitmap) />
    <Control Id=BannerLine Type=Line X=0 Y=44 Width=370 Height=0 />
    <Control Id=Description Type=Text X=25 Y=23 Width=280 Height=15 Transparent=yes NoPrefix=yes Text=!(loc.DrugsDBFileDlgDescription) />
    <Control Id=Title Type=Text X=15 Y=6 Width=200 Height=15 Transparent=yes NoPrefix=yes Text=!(loc.DrugsDBFileDlgTitle) />

    <Control Type=Edit Id=txtDrugsFilePath Width=270 Height=15 X=22 Y=142 Property=DRUGSDBFILEPATH Text=[DRUGSDBFILEPATH] />
    <Control Type=PushButton Id=btnBrowse Width=56 Height=21 X=300 Y=139 Text=&amp;Browse >          
      <Publish Event=DoAction Value=BrowseDBFile Order=0>1</Publish>          
      <Publish Event=SpawnDialog Value=ValidationErrorDlg Order=1000>ValidationErrorText</Publish>
    </Control>
    <Control Type=Text Id=lblInstructions Width=290 Height=15 X=26 Y=120 Text=!(loc.DrugsDBFileDlgLabelDescription) />

    <Control Id=BottomLine Type=Line X=0 Y=234 Width=370 Height=0 />
    <Control Id=Back Type=PushButton X=180 Y=243 Width=56 Height=17 Text=!(loc.WixUIBack) />
    <Control Id=Next Type=PushButton X=236 Y=243 Width=56 Height=17 Text=!(loc.WixUINext) />
    <Control Id=Cancel Type=PushButton X=304 Y=243 Width=56 Height=17 Cancel=yes Text=!(loc.WixUICancel)>
      <Publish Event=SpawnDialog Value=CancelDlg>1</Publish>
    </Control>
  </Dialog>
</UI>

Código de acciones personalizadas :

[CustomAction]
        public static ActionResult BrowseDBFile(Session session)
        {
            try {
                session.Log(Begin OpenFileChooser Custom Action);
                var task = new Thread(() => GetFile(session));
                task.SetApartmentState(ApartmentState.STA);
                task.Start();
                task.Join();
                session.Log(End OpenFileChooser Custom Action);
            } catch (Exception ex) {
                session.Log(Exception occurred as Message: {0}\r\n StackTrace: {1}, ex.Message, ex.StackTrace);
                return ActionResult.Failure;
            }
            return ActionResult.Success;
        }

        private static void GetFile(Session session)
        {
            OpenFileDialog fileDialog = new OpenFileDialog();
            if (fileDialog.ShowDialog() == DialogResult.OK) {
                session[DRUGSDBFILEPATH] = fileDialog.FileName;
            }
        }

ACTUALIZAR

Descubrió la solución es invocar el evento de RESET antes de realizar la acción asociada al botón BROWSE. También he realizado un Anuncie después de realizar la acción personalizada. Mira abajo.

<UI>
      <Dialog Id=DrugsDBFileBrowseDialog Width=370 Height=270 Title=!(loc.DrugsDBFileDlg_Title)>
        <Control Id=BannerBitmap Type=Bitmap X=0 Y=0 Width=370 Height=44 TabSkip=no Text=!(loc.SetupTypeDlgBannerBitmap) />
        <Control Id=BannerLine Type=Line X=0 Y=44 Width=370 Height=0 />
        <Control Id=Description Type=Text X=25 Y=23 Width=280 Height=15 Transparent=yes NoPrefix=yes Text=!(loc.DrugsDBFileDlgDescription) />
        <Control Id=Title Type=Text X=15 Y=6 Width=200 Height=15 Transparent=yes NoPrefix=yes Text=!(loc.DrugsDBFileDlgTitle) />

        <Control Type=Edit Id=txtDrugsFilePath Width=270 Height=15 X=22 Y=142 Property=DRUGSDBFILEPATH Text=[DRUGSDBFILEPATH] />
        <Control Type=PushButton Id=btnBrowse Width=56 Height=21 X=300 Y=139 Text=&amp;Browse > 
          <Publish Event=Reset Value=1>1</Publish> 
          <Publish Event=DoAction Value=BrowseDBFile Order=1><![CDATA[1]]></Publish>
          <Publish Property=DRUGSDBFILEPATH Value=[DRUGSDBFILEPATH]><![CDATA[1]]></Publish>
        </Control>
        <Control Type=Text Id=lblInstructions Width=290 Height=15 X=26 Y=120 Text=!(loc.DrugsDBFileDlgLabelDescription) />

        <Control Id=BottomLine Type=Line X=0 Y=234 Width=370 Height=0 />
        <Control Id=Back Type=PushButton X=180 Y=243 Width=56 Height=17 Text=!(loc.WixUIBack) />
        <Control Id=Next Type=PushButton X=236 Y=243 Width=56 Height=17 Text=!(loc.WixUINext) >   
          <Publish Event=DoAction Value=ValidateSelectedPath Order=1>1</Publish>  
          <Publish Event=SpawnDialog Value=ValidationErrorDlg Order=1000>ValidationErrorText</Publish>
        </Control>
        <Control Id=Cancel Type=PushButton X=304 Y=243 Width=56 Height=17 Cancel=yes Text=!(loc.WixUICancel)>
          <Publish Event=SpawnDialog Value=CancelDlg>1</Publish>
        </Control>
      </Dialog>
    </UI>
Publicado el 07/11/2018 a las 22:31
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

    <Control Type="Edit" Id="txtDrugsFilePath" Width="270" Height="15" X="22" Y="142" Property="DRUGSDBFILEPATH" Text="[DRUGSDBFILEPATH]" />
    <Control Type="PushButton" Id="btnBrowse" Width="56" Height="21" X="300" Y="139" Text="&amp;Browse" > 
      <Publish Event="Reset" Value="1">1</Publish> 
      <Publish Event="DoAction" Value="BrowseDBFile" Order="1"><![CDATA[1]]></Publish>
      <Publish Property="DRUGSDBFILEPATH" Value="[DRUGSDBFILEPATH]"><![CDATA[1]]></Publish>
    </Control>
    <Control Type="Text" Id="lblInstructions" Width="290" Height="15" X="26" Y="120" Text="!(loc.DrugsDBFileDlgLabelDescription)" />

    <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" />
    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="!(loc.WixUINext)" >   
      <Publish Event="DoAction" Value="ValidateSelectedPath" Order="1">1</Publish>  
      <Publish Event="SpawnDialog" Value="ValidationErrorDlg" Order="1000">ValidationErrorText</Publish>
    </Control>
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
      <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    </Control>
  </Dialog>
</UI>
Respondida el 13/11/2018 a las 20:53
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more