2011-12-02 2 views
5

Sto provando a scrivere una finestra di dialogo personalizzata per WiX che, come parte del flusso di lavoro, mostra un'immagine di errore in risposta a determinate condizioni. Comunque, WiX sembra ignorare le mie dimensioni e mostrarle come meglio si adatta. Ecco il mio codice:WiX non esegue correttamente il rendering delle immagini

<Binary Id="WixUI_FailureImg" SourceFile="$(sys.SOURCEFILEDIR)..\Resources\Failure.ico" /> 
<Control Id="TestResult_Failure" Type="Icon" IconSize="16" X="15" Y="206" Width="16" Height="16" Text="WixUI_FailureImg"> 
    <Condition Action="hide">LOGON_VALID = "1"</Condition> 
    <Condition Action="show">LOGON_VALID = "0"</Condition> 
</Control> 

ho incluso un frammento della finestra di dialogo risultante di sotto, con l'immagine originale (un .ico 16x16) in background. Come puoi vedere, l'immagine è stata ridimensionata verso l'alto e non c'è trasparenza intorno all'immagine. Ho provato anche le icone bitmap a 8 e 24 bit, ma tutte producono lo stesso risultato. C'è qualcosa che sto facendo ovviamente sbagliato?

example of borked image

UPDATE:

Nel caso ve lo stiate chiedendo come le immagini opere dinamiche, ecco la sezione pertinente:

<Control Id="TestResult_Success" Type="Icon" IconSize="16" X="15" Y="210" Width="12" Height="12" Text="WixUI_SuccessImg"> 
    <Condition Action="hide">LOGON_VALID = "0"</Condition> 
    <Condition Action="show">LOGON_VALID = "1"</Condition> 
</Control> 
<Control Id="TestPrompt_Success" Type="Text" X="35" Y="210" Width="322" Height="10" Text="!(loc.SqlSelectDlgConnectionValid)"> 
    <Condition Action="hide">LOGON_VALID = "0"</Condition> 
    <Condition Action="show">LOGON_VALID = "1"</Condition> 
</Control> 
<Control Id="TestResult_Failure" Type="Icon" IconSize="16" X="15" Y="210" Width="12" Height="12" Text="WixUI_FailureImg"> 
    <Condition Action="hide">LOGON_VALID = "1"</Condition> 
    <Condition Action="show">LOGON_VALID = "0"</Condition> 
</Control> 
<Control Id="TestPrompt_Failure" Type="Text" X="35" Y="210" Width="322" Height="10" Text="!(loc.SqlSelectDlgConnectionInvalid)"> 
    <Condition Action="hide">LOGON_VALID = "1"</Condition> 
    <Condition Action="show">LOGON_VALID = "0"</Condition> 
</Control> 

Come si può intuire dallo screenshot, la pagina è legato alla creazione di una connessione SQL; Ho un'azione personalizzata che crea una stringa di connessione in base all'input dell'utente e tenta di convalidarlo. Se è valido (LOGON_VALID = "1"), ottengo un'immagine di spunta e del testo per dire che tutto va bene, altrimenti ricevo un'icona di avviso e del testo per avvisare l'utente. Naturalmente, il pulsante Avanti è anche controllato da questo valore.

+0

chiedendo una domanda separata ... curioso di sapere ... stai cambiando l'immagine in modo dinamico? Voglio dire l'immagine apparirà come da condizione? –

+0

Sì; quindi c'è un controllo TestResult_Success che mostra un segno di spunta verde se LOGON_VALID = 1 e lo nasconde se LOGON_VALID = 0. Le immagini hanno le stesse dimensioni e nella stessa posizione. –

+0

puoi condividere qualche codice per aggiornare dinamicamente l'immagine? –

risposta

5

X, Y, Larghezza e Altezza sono in "unità di installazione", non in pixel. La conversione delle unità di installazione in pixel dipende dal tema visivo, dalle dimensioni del carattere e dalle impostazioni DPI. La soluzione migliore è renderla in buone condizioni con le impostazioni predefinite.

+2

È un peccato che la documentazione WiX non lo chiarisca. Alla fine, ho fatto ricorso a una serie di valori e ho scoperto che per la mia immagine 16x16, impostando la larghezza e l'altezza su 12 e lasciando IconSize a 16, producevo i risultati desiderati (al tema visivo predefinito/dimensione carattere/Impostazioni DPI, come si nota). –

+0

@DavidKeaveny Ho anche dovuto ridimensionare la mia immagine di 1.3333333 volte quello che ho impostato nella mia interfaccia utente WiX. Questo è stato un passo così ridicolo (http://stackoverflow.com/questions/28997742/how-do-you-optimize-a-jpeg-image-for-msi-installers/29012944#29012944) Grazie mille per aver postato cosa ha funzionato per te, David. Mi ha aiutato moltissimo. – Alexandru