WPF

2011-08-11 28 views
8

में चयन ब्रश रंग की गणना करें मैंने देखा है कि लाल रंग में एक टेक्स्ट बॉक्स का चयन सेट करते समय, और रंग को सत्यापित करने के लिए रंग पिकर का उपयोग करते हुए, रंग # FF9999 पर फीका हुआ है।WPF

मेरे पास एक विशिष्ट रंग है जो मेरे क्लाइंट को चयन ब्रश के लिए आवश्यक है। क्या गणना करने का कोई तरीका है कि मुझे चयन ब्रश को किस रंग को सेट करना चाहिए ताकि पाठ का चयन किया जा सके, सटीक रंग प्रदर्शित होता है?

वर्तमान में मुझे चयन ब्रश # ​​6599D1 के रूप में होना चाहिए, लेकिन एक बार सेट होने पर, रंग # सी 1 डी 6ED है।

मैं शुरुआती रंग की गणना कैसे कर सकता हूं ताकि अंत रंग मुझे चाहिए?

+1

साथ TextBox देखो आप कोड आप रंग सेट करने के लिए प्रयोग किया जाता दे सकते है? – Jakub

+0

मुझे संदेह है कि आपका रंग semitransparent बनाया जा रहा है, और आपको इसे अपारदर्शी बनाने की आवश्यकता है। यह देखने के बिना कि आप रंग कैसे बदल रहे हैं, मेरे पास उससे अधिक सुझाव देने का कोई आसान तरीका नहीं है। –

+0

यदि आप अत्यधिक कस्टम शैली करने की कोशिश कर रहे हैं तो मदद नहीं करता है, लेकिन मैं सिस्टम डिफ़ॉल्ट रंग छोड़ना पसंद करता हूं, और कस्टम नियंत्रण बनाते समय, समान संदर्भों से सिस्टम डिफ़ॉल्ट रंग उधार लेता हूं। यह विंडो के एक्सेसिबिलिटी मोड के साथ संगतता के लिए सहायक है, और इसे बनाता है ताकि उपयोगकर्ता खिड़की की थीम क्षमताओं का उपयोग बिना खराब दृश्य संघर्ष के कर सकें। –

उत्तर

2

अच्छा सवाल है लेकिन मुझे लगता है कि यह असंभव है। यदि ControlTemplate के अंदर कुछ ओवरले है तो आप एक फ़ंक्शन को तैयार नहीं कर सकते हैं जो एक गहरे रंग की गणना करता है जो तब इच्छित रंग के रूप में समाप्त हो जाएगा।

उदा। जब आप लाल इनपुट करते हैं: 255,0,0 आपको 255,153,153 मिलता है, अब आपके प्रारंभिक रंग पर लागू होने वाली फ़ंक्शन को लाल रंग को अंधेरे करने की आवश्यकता होगी, यह निश्चित रूप से केवल लाल चैनल में किया जा सकता है क्योंकि हरा और नीला पहले से शून्य है । समस्या लाल चैनल नहीं है (जो 255 के रूप में समाप्त होती है और इसलिए प्रभावित नहीं होती है), इसलिए इसमें कोई भी परिवर्तन केवल अंधेरे के बजाय रंग को और भी निराश करने के लिए काम करेगा।

संपादित करें: इस में थोड़ा और अधिक mathmatical बनाने के लिए, समारोह है कि चयन की पारदर्शिता से लागू किया जाता है:

f (x) = 0.4x + 153

यदि आप इसे अपने रंग के सभी चैनलों पर लागू करते हैं तो आप देखेंगे कि यह वास्तव में मामला है। अब हम उन मूल्यों को कैसे प्राप्त करते हैं जिन्हें हम चाहते हैं? काफी सरल है, हम समारोह है, जो इस है उलटने:

च^(- 1) (x) = -2.5 (153.0 - एक्स)

वाह! अब आप अपने रंग के लिए लागू होने वाले कर सकते हैं:

आर: -130.0
जी: 0
बी: 140

हम्म, सब के बाद इतना महान नहीं मैं लगता है।

यह नकारात्मक मान बिल्कुल सही क्यों नहीं है, प्रत्येक रंग जिसमें 153 से नीचे घटक हैं, उलट नहीं है।

3

द्वारा H.B.

जवाब पर बाद मैं पिछले

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

जो

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

TextBox है डिफ़ॉल्ट Background सेट करने के लिए उलट में निम्न सूत्र के साथ अस्पष्टता द्वारा परिकलित सफेद और SelectionOpacity को 0.4 पर सेट करें।
एचबी के रूप में। समझाया गया है, आप इन डिफ़ॉल्ट सेटिंग्स के साथ अपना रंग प्राप्त नहीं कर सकते हैं क्योंकि लाल मान -130 के रूप में बाहर आ जाएगा। यह 3 विकल्पों के साथ आप छोड़ देता है कुछ ऐसा करते हैं तो आप चाहते हैं कि विकल्प 2 पत्ते नहीं है Background बदलें, SelectionOpacity बदलने के लिए या यह :)

TextBox Background शायद बदल रहा है ऐसा नहीं करते हैं, को बदलने SelectionOpacity

हम डॉन ' टी लाल 0 नीचे जाना चाहता हूँ ताकि

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

जो

1 - (101/255) = Opacity 

यह 0604 में परिणाम देता है ओ SelectionOpacity मान के साथ आप गणना कर सकते हैं कि SelectionBrush को #0056B3 पर #6599D1 बनने के लिए ओपेसिटी लागू होने के बाद सेट करने की आवश्यकता है।

यहाँ कैसे इन मूल्यों

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

enter image description here

+0

दिलचस्प विचार, लेकिन स्वीकार्य रूप से पाठ इस तरह के उच्च मूल्यों पर महत्वपूर्ण रूप से कम पठनीय बन जाता है। –

+0

@ एचबी: यह सुनिश्चित करता है कि पूरे 'टेक्स्टबॉक्स' छवि में थोड़ा विचलित या धुंधला दिखता है (यह एप्लिकेशन में थोड़ा बेहतर है) लेकिन हां, –

+0

पढ़ने के लिए यह कठिन है मेरी आखिरी टिप्पणी को न मानें .. यह देखा मेरे विंडोज 7 कंप्यूटर पर धुंधला लेकिन किसी अन्य कंप्यूटर से यह तेज दिखता है ... –