2011-12-02 6 views
5

Tôi đang cố gắng viết một hộp thoại WiX tùy chỉnh, như một phần của quy trình làm việc của nó, hiển thị hình ảnh lỗi theo một số điều kiện nhất định. Tuy nhiên, WiX dường như bỏ qua kích thước của tôi và hiển thị khi nó cảm thấy vừa vặn. Đây là mã của tôi:WiX không hiển thị hình ảnh chính xác

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

Tôi đã bao gồm một đoạn của hộp thoại kết quả bên dưới, với hình ảnh gốc (16x16 .ico) trong nền. Như bạn có thể thấy, hình ảnh đã được thu nhỏ trở lên và không có độ trong suốt xung quanh hình ảnh. Tôi đã thử bitmap 8 bit và 24 bit cũng như các biểu tượng, nhưng tất cả đều tạo ra cùng một kết quả. Có điều gì mà tôi đang làm rõ ràng là sai?

example of borked image

UPDATE:

Trong trường hợp bạn đang tự hỏi làm thế nào các hình ảnh công trình năng động, đây là phần có liên quan:

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

Như bạn có thể đoán từ ảnh chụp màn hình, trang có liên quan đến việc thiết lập kết nối SQL; Tôi có một hành động tùy chỉnh tạo ra một chuỗi kết nối dựa trên đầu vào của người dùng và cố gắng xác thực nó. Nếu nó hợp lệ (LOGON_VALID = "1"), tôi nhận được một hình ảnh đánh dấu và một số văn bản để nói tất cả mọi thứ là tốt, nếu không tôi nhận được một biểu tượng cảnh báo và một số văn bản để cảnh báo người dùng. Tất nhiên, nút Tiếp theo cũng được kiểm soát bởi giá trị này.

+0

hỏi một câu hỏi riêng .. rất thông minh để biết .. bạn có đang thay đổi hình ảnh động không? tôi có nghĩa là hình ảnh sẽ xuất hiện theo điều kiện? –

+0

Có; do đó, có một điều khiển TestResult_Success cho thấy một đánh dấu màu xanh lá cây nếu LOGON_VALID = 1, và giấu nó nếu LOGON_VALID = 0. Các hình ảnh có cùng kích thước và tại cùng một vị trí. –

+0

bạn có thể vui lòng chia sẻ một số mã để cập nhật động hình ảnh không? –

Trả lời

5

X, Y, Chiều rộng và Chiều cao nằm trong "đơn vị trình cài đặt", không phải pixel. Việc chuyển đổi đơn vị cài đặt thành pixel phụ thuộc vào chủ đề hình ảnh, kích thước phông chữ và cài đặt DPI. Đặt cược tốt nhất của bạn là làm cho nó trông tốt trên các thiết lập mặc định.

+2

Thật đáng tiếc khi tài liệu WiX không làm rõ điều này. Cuối cùng, tôi đã sử dụng một loạt các giá trị và nhận thấy rằng đối với hình ảnh 16x16 của tôi, hãy đặt Chiều rộng và Chiều cao thành 12 và để lại IconSize ở mức 16, tạo ra kết quả mong muốn (theo chủ đề hình ảnh/kích thước phông chữ mặc định) Cài đặt DPI, như bạn lưu ý). –

+0

@DavidKeaveny Tôi cũng đã phải mở rộng hình ảnh của mình lên 1,3333333 lần những gì tôi đã đặt trong giao diện người dùng WiX của mình. Đây là một bước vô lý như vậy (http://stackoverflow.com/questions/28997742/how-do-you-optimize-a-jpeg-image-for-msi-installers/29012944#29012944) Cảm ơn bạn rất nhiều vì đã đăng lại những gì đã làm việc cho bạn, David. Nó đã giúp tôi rất nhiều. – Alexandru