2010-10-16 72 views
11

Tôi có nút bật/tắt có png có nền trong suốt và nền trước màu đen. Nếu nút được chọn thì tôi muốn màu đen của hình ảnh thay đổi thành màu do người dùng chọn. Có cách nào để làm điều này trong Silverlight và/hoặc wp7?Làm cách nào để thay đổi màu của hình ảnh trong silverlight/WP7 (Mặt nạ màu)?

Vì vậy, ví dụ:

<ToggleButton> 
    <Image Source="MyImage.png" /> 
</ToggleButton> 

MyImage.png có nền trong suốt và một foreground màu đen. Màu sắc ưa thích của người dùng là màu đỏ. Khi nút được bật lên, tôi muốn nền trước màu đen của hình ảnh chuyển sang màu đỏ.

+0

hiển thị một số mã. –

Trả lời

22

Tôi sẽ thử phương pháp OpacityMask. Về cơ bản, nó sẽ trông giống như sau:

<Rectangle Fill="Red"> 
    <Rectangle.OpacityMask> 
    <ImageBrush ImageSource="MyImage.png"/> 
    </Rectangle.OpacityMask> 
</Rectangle> 

bằng cách thay đổi thuộc tính điền hình chữ nhật, bạn sẽ nhận được hình ảnh màu khác nhau.

+1

Tuyệt vời !!! Điều đó hoàn toàn hiệu quả. Tôi sẽ cần phải tìm ra cách để kết hợp nó vào giải pháp của tôi, nhưng cảm ơn rất lớn !! – Micah

+0

Công trình này hoạt động! Cũng đáng chú ý là bạn có thể thêm 'Stretch =" None "' vào 'ImageBrush' để làm cho hình ảnh chiếm kích thước hình chữ nhật của bạn, nếu không nó có vẻ hiển thị ở kích thước đầy đủ. –

0

Người dùng có bao nhiêu quyền kiểm soát đối với màu sắc?

Nếu chúng chọn từ bộ giới hạn (ví dụ: đỏ, xanh lá cây, xanh lam, đen, nâu) thì điều đơn giản nhất là liên kết nguồn hình ảnh với biến chứa tên của hình ảnh và sau đó thay đổi tên nào được giữ trong biến đó.

Nếu họ có thể chọn bất kỳ màu nào thì bạn cần thực hiện một số xử lý hình ảnh để thay đổi pixel đen của hình ảnh tham chiếu sang màu đã chọn, ghi vào bộ nhớ riêng và sau đó liên kết nguồn hình ảnh với tệp mới đó.

Một cách khác là vẽ nút trong XAML và sau đó bạn có thể kiểm soát trực tiếp màu nền trước. This MSDN page mô tả các khái niệm cơ bản về bản vẽ. Bạn có thể sử dụng các lệnh tương tự để xác định hình ảnh trên một nút, như mô tả trên this page từ blog của Scott Gu:

image of code from blog

(đây là hình ảnh của mã từ blog).

Nếu bạn liên kết màu với biến thì người dùng có thể thay đổi màu của hình ảnh. Nó dựa vào bạn có thể vẽ hình ảnh trong XAML.

+0

Đó là những gì tôi đã hy vọng tránh nhưng tôi có thể không có bất kỳ lựa chọn nào khác. – Micah

+0

@Micah - Tôi vừa mới nghĩ về một thứ khác - cập nhật câu trả lời. – ChrisF

+0

Không phải là một ý tưởng tồi. Tôi có thể thử điều đó. Tôi đang sử dụng các biểu tượng trong sdk WP7. Có lẽ tôi có thể chuyển đổi tập tin vectơ thành xaml. – Micah

Các vấn đề liên quan