我注意到,在將wpf中的文本框選擇設置爲紅色並使用顏色選擇器驗證顏色時,顏色淡化爲#FF9999。計算WPF中的選擇筆刷顏色
我有一個特定的顏色,我的客戶需要選擇畫筆。有沒有一種方法可以計算出什麼顏色我應該設置SelectionBrush,所以當文本被選中時,確切的顏色顯示?
目前我需要選擇畫筆爲#6599D1,但一旦設置,顏色是#C1D6ED。
如何計算起始顏色,使最終顏色成爲我需要的顏色?
我注意到,在將wpf中的文本框選擇設置爲紅色並使用顏色選擇器驗證顏色時,顏色淡化爲#FF9999。計算WPF中的選擇筆刷顏色
我有一個特定的顏色,我的客戶需要選擇畫筆。有沒有一種方法可以計算出什麼顏色我應該設置SelectionBrush,所以當文本被選中時,確切的顏色顯示?
目前我需要選擇畫筆爲#6599D1,但一旦設置,顏色是#C1D6ED。
如何計算起始顏色,使最終顏色成爲我需要的顏色?
好問題,但我認爲這是不可能的。如果ControlTemplate內有一些覆蓋層,則無法制定計算較暗顏色的函數,然後顏色會以預期顏色結束。
例如當你輸入的是:255,0,0
你得到了255,153,153
,現在需要應用到你的初始顏色的函數需要使紅色變暗,這當然只能在紅色通道中完成,因爲綠色和藍色已經爲零。但問題不在於紅色通道(最終結果爲255,因此不受影響),因此對其進行的任何更改只會使顏色變得更飽和而不是變暗。
編輯:爲了使這個更工科數學一點,即由選擇的透明度施加的函數是:
F(X)= 0.4X + 153
如果您將此應用於您的顏色的所有通道,您將會看到確實如此。現在我們如何獲得我們想要的價值?很簡單,我們反轉的功能,這是這樣的:
˚F^( - 1)(X)= -2.5(153.0 - X)
太好了!現在,讓我們應用,爲您的色彩:
R:-130.0
G:0
B:140
嗯,畢竟沒有那麼大我猜想。
這個負值恰恰是爲什麼這不總是可能的,每個顏色的組成部分低於153
是不可逆的。
跟進答案通過H.B.
我已經在過去
Red = OriginalRed * Opacity + (1-Opacity) * BackgroundRed
其反轉爲
(Red - (1-Opacity) * BackgroundRed)/Opacity = OriginalRed
的TextBox
有默認Background
集計算不透明以下公式白色和SelectionOpacity
設置爲0.4。
作爲H.B.解釋說,你不能使用這些默認設置來實現你的顏色,因爲紅色值將以-130的值出現。這使你有3個選項,更改Background
,改變SelectionOpacity
或者不這樣做:)
改變TextBox Background
可能不是你想做的事讓葉選項2的東西,改變SelectionOpacity
我們不」不想紅去低於0,以便
(101 - (1-Opacity) * 255) = 0
這給
1 - (101/255) = Opacity
這導致0604小號o通過這個SelectionOpacity
值,您可以計算出SelectionBrush
需要設置爲#0056B3
,一旦應用了不透明度,就會變爲#6599D1
。
這裏是如何的TextBox
外觀與這些值
<TextBox SelectionBrush="#0056B3"
SelectionOpacity="0.604" />
有趣的想法,但文本承認確實會變得不那麼可讀性在如此高的價值。 –
@HB:確實如此,整個'TextBox'看起來有點失真或模糊的圖像(在應用程序中稍微好一點),但是,它肯定難以閱讀 –
Nevermind my last comment ..它看起來在我的Windows 7電腦模糊,但從另一臺電腦,它看起來很清晰... –
你能不能給你用來設置顏色的代碼? – Jakub
我懷疑你的顏色是半透明的,你需要使它不透明。沒有看到你如何改變顏色,我沒有一個簡單的方法來提出更多的建議。 –
如果您嘗試執行高度自定義樣式,但是我傾向於保留系統默認顏色,並且在創建自定義控件時從相似的上下文中借用系統默認顏色,則無助於此。這有助於與Window的可訪問模式兼容,並且使用戶可以使用窗口的主題功能,而不會引起令人討厭的視覺衝突。 –