2011-12-02 27 views
5

Próbuję napisać niestandardowe okno dialogowe WiX, które w ramach przepływu pracy pokazuje obraz błędu w odpowiedzi na określone warunki. Jednak WiX wydaje się ignorować moje wymiary i wyświetlać, ponieważ czuje się dobrze. Oto mój kod:WiX nieprawidłowo renderuje obrazy

<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> 

podaję fragment wyświetlonym oknie poniżej, z obrazu oryginalnego (a .ico 16x16) w tle. Jak widać, obraz został przeskalowany w górę i nie ma przezroczystości wokół obrazu. Próbowałem również ikon bitowych 8-bitowych i 24-bitowych oraz ikon, ale wszystkie dają taki sam wynik. Czy jest coś, co robię oczywiście źle?

example of borked image

UPDATE:

W przypadku, gdy zastanawiasz się, w jaki sposób dynamicznych obrazów prace, oto właściwy rozdział:

<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> 

Jak można się domyślić z ekranu, strona jest związane z ustanawianiem połączenia SQL; Mam niestandardową akcję, która tworzy ciąg połączenia na podstawie danych wprowadzonych przez użytkownika i próbuje go zweryfikować. Jeśli jest poprawna (LOGON_VALID = "1"), otrzymuję obraz zaznaczenia i tekst, który mówi, że wszystko jest w porządku, w przeciwnym razie pojawi się ikona ostrzeżenia i tekst ostrzegający użytkownika. Oczywiście przycisk Dalej jest również kontrolowany przez tę wartość.

+0

zadając oddzielne pytanie .. czy wiesz, czy zmieniasz obraz dynamicznie? mam na myśli, że obraz pojawi się zgodnie z warunkiem? –

+0

Tak; więc istnieje kontrolka TestResult_Success, która pokazuje zielony znacznik, jeśli LOGON_VALID = 1, i ukrywa go, jeśli LOGON_VALID = 0. Obrazy są tego samego rozmiaru i w tej samej lokalizacji. –

+0

Czy możesz udostępnić kod do dynamicznej aktualizacji obrazu? –

Odpowiedz

5

X, Y, Szerokość i Wysokość są w "jednostkach instalatora", a nie pikselach. Konwersja jednostek instalacyjnych na piksele zależy od motywu wizualnego, rozmiaru czcionki i ustawień DPI. Najlepiej jest, aby wyglądał dobrze na domyślnych ustawieniach.

+2

Szkoda, że ​​dokumentacja WiX tego nie wyjaśnia. W końcu uciekłem się do wypróbowania szeregu wartości i odkryłem, że dla mojego obrazu 16x16, ustawienie szerokości i wysokości na 12 i pozostawienie IconSize na 16, dało zamierzone wyniki (domyślny motyw wizualny/rozmiar czcionki/Ustawienia DPI, jak zauważyłeś). –

+0

@DavidKeaveny Muszę też powiększyć obraz o 1.3333333 razy, co ustawię w interfejsie WiX. To był taki śmieszny krok (http://stackoverflow.com/questions/28997742/how-do-you-optimize-a-jpeg-image-for-msi-installers/29012944#29012944) Dziękuję bardzo za odesłanie co dla ciebie zadziałało, David. Pomógł mi ogromnie. – Alexandru

Powiązane problemy