2011-08-11 26 views
8

Tôi đã nhận thấy khi thiết lập lựa chọn một hộp văn bản trong wpf sang màu đỏ và sử dụng bộ chọn màu để xác minh màu, màu bị mờ sang # FF9999.tính màu chọn cọ trong WPF

Tôi có một màu cụ thể mà khách hàng của tôi yêu cầu cho bàn chải lựa chọn. Có cách nào để tính toán màu sắc tôi nên đặt SelectionBrush để khi văn bản được chọn, màu sắc chính xác được hiển thị?

Hiện tại tôi cần có cọ chọn là # 6599D1, nhưng một khi được đặt, màu là # C1D6ED.

Làm cách nào để tính màu bắt đầu để màu cuối là thứ tôi cần?

+1

Bạn có thể cho đoạn code bạn sử dụng để thiết lập các màu sắc? – Jakub

+0

Tôi nghi ngờ rằng màu của bạn đang được bán trong suốt, và bạn cần làm cho nó mờ đục. Nếu không nhìn thấy cách bạn thay đổi màu sắc, tôi không có một cách dễ dàng để đề xuất nhiều hơn thế. –

+0

Không giúp ích nếu bạn đang cố gắng làm một phong cách tùy biến cao, nhưng tôi có xu hướng muốn để lại màu mặc định của hệ thống và khi tạo điều khiển tùy chỉnh, hãy mượn màu mặc định của hệ thống từ các ngữ cảnh tương tự. Điều này rất hữu ích cho khả năng tương thích với các chế độ trợ năng của Window, và làm cho nó để người dùng có thể sử dụng khả năng chủ đề của cửa sổ mà không gây ra xung đột thị giác khó chịu. –

Trả lời

2

Câu hỏi hay nhưng tôi nghĩ điều này là không thể. Nếu có một số lớp phủ bên trong ControlTemplate bạn không thể xây dựng một hàm tính toán một màu tối hơn mà sau đó sẽ kết thúc như màu dự định.

ví dụ: khi bạn nhập màu đỏ là: 255,0,0 bạn nhận được 255,153,153, bây giờ chức năng cần được áp dụng cho màu ban đầu của bạn sẽ cần phải làm tối màu đỏ, điều này tất nhiên chỉ có thể được thực hiện trong kênh màu đỏ khi màu xanh lá cây và màu xanh là không . Tuy nhiên, vấn đề không phải là kênh màu đỏ (kết thúc bằng 255 và do đó không bị ảnh hưởng), vì vậy bất kỳ thay đổi nào sẽ chỉ phục vụ cho việc khử màu thậm chí nhiều hơn thay vì làm tối màu.

Edit: Để làm điều này mathmatical hơn một chút, các chức năng được áp dụng bởi tính minh bạch của sự lựa chọn là:

f (x) = 0.4x + 153

Nếu bạn áp dụng điều này cho tất cả các kênh màu của bạn, bạn sẽ thấy rằng đây thực sự là trường hợp. Bây giờ làm thế nào để chúng ta có được những giá trị chúng ta muốn? Khá đơn giản, chúng ta đảo ngược chức năng, đó là:

e^(- 1) (x) = -2.5 (153,0 - x)

Tuyệt vời! Bây giờ cho phép áp dụng được cho màu sắc của bạn:

R: -130,0
G: 0
B: 140

Hmm, không tuyệt vời như vậy sau tất cả tôi giả sử.

Giá trị âm này chính xác là lý do tại sao điều này không phải lúc nào cũng có thể, mọi màu có thành phần bên dưới 153 không thể đảo ngược.

3

Theo dõi trên câu trả lời của H.B.

Tôi đã tính toán opacity với công thức sau đây trong quá khứ

Red = OriginalRed * Opacity + (1-Opacity) * BackgroundRed 

mà đảo ngược để

(Red - (1-Opacity) * BackgroundRed)/Opacity = OriginalRed 

Các TextBox có mặc định Background bộ trắng và SelectionOpacity đặt thành 0,4.
Là H.B. giải thích, bạn không thể đạt được màu sắc của bạn với các thiết lập mặc định kể từ khi giá trị Red sẽ đi ra là -130. Điều này làm cho bạn 3 lựa chọn, thay đổi Background, thay đổi SelectionOpacity hoặc không làm điều đó :)

Thay đổi TextBox Background lẽ không phải là một cái gì đó bạn muốn làm như vậy mà rời khỏi phương án 2, thay đổi SelectionOpacity

Chúng tôi không' t muốn đỏ để đi dưới 0 để

(101 - (1-Opacity) * 255) = 0 

mang đến cho

1 - (101/255) = Opacity 

Điều này dẫn đến 0604 s o với giá trị SelectionOpacity này, bạn có thể tính toán rằng SelectionBrush cần phải được đặt thành #0056B3 để trở thành #6599D1 sau khi áp dụng Độ mờ.

Đây là cách TextBox nhìn với những giá trị

<TextBox SelectionBrush="#0056B3" 
     SelectionOpacity="0.604" /> 

enter image description here

+0

Ý tưởng thú vị, nhưng văn bản được thừa nhận sẽ trở nên ít có thể đọc được ở những giá trị cao như vậy. –

+0

@HB: Chắc chắn, toàn bộ 'TextBox' trông hơi bị bóp méo hoặc mờ trong hình ảnh (nó tốt hơn một chút trong ứng dụng) nhưng có, nó chắc chắn khó đọc hơn –

+0

Không bao giờ nhận xét cuối cùng của tôi .. nó trông mờ trên máy tính Windows 7 của tôi nhưng từ một máy tính khác có vẻ sắc nét ... –

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